【类型挑战】Trim,难度⭐️⭐️
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第25天,点击查看活动详情。
Dear,大家好,我是“前端小鑫同学”,😇长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~
知识运用:
- 涉及到模板字符类型。
- 涉及到infer关键字使用。
- 涉及到类型编程中递归使用。
题目分析:
题目地址:108-medium-trim
实现Trim<T>
,它是一个字符串类型,并返回一个新字符串,其中两端的空白符都已被删除。
例如
type trimed = Trim<' Hello World '> // expected to be 'Hello World'
题目解答:
测试用例:
- 通过我们设计的类型工具将输入的类型处理为预期的类型。
- 分别需要处理空白字符、换行符、制表符三种。
/* _____________ 测试用例 _____________ */ import type { Equal, Expect } from '@type-challenges/utils' type cases = [ Expect<Equal<Trim<'str'>, 'str'>>, Expect<Equal<Trim<' str'>, 'str'>>, Expect<Equal<Trim<' str'>, 'str'>>, Expect<Equal<Trim<'str '>, 'str'>>, Expect<Equal<Trim<' str '>, 'str'>>, Expect<Equal<Trim<' \n\t foo bar \t'>, 'foo bar'>>, Expect<Equal<Trim<''>, ''>>, Expect<Equal<Trim<' \n\t '>, ''>>, ]
答案及解析:
这道题的应用是前两道提的合集,分别递归处理前面的空白字符和递归处理后面的空白字符类型。
- 老套路,使用泛型来约束输入类型为String类型。
- 使用TrimLeft类型工具来处理输入类型中左侧出现的空白字符、换行符、制表符。
- 使用TrimRight类型工具来处理输入类型中右侧出现的空白字符、换行符、制表符。
- 可以先处理右侧再处理左侧,不做限制。
/* _____________ 答案 _____________ */ type TrimLeft<S extends string> = S extends `${" " | "\n" | "\t"}${infer Rest}` ? TrimLeft<Rest> : S; type TrimRight<S extends string> = S extends `${infer Rest}${" " | "\n" | "\t"}` ? TrimRight<Rest> : S; type Trim<S extends string> = TrimLeft<TrimRight<S>>;
推荐阅读:
接下来的一题是:【类型挑战】String to Union,难度⭐️⭐️
欢迎关注我的公众号“前端小鑫同学”,原创技术文章第一时间推送。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)