0
点赞
收藏
分享

微信扫一扫

【类型挑战】Trim Left,难度⭐️⭐️



Dear,大家好,我是“前端小鑫同学”,长期从事前端开发,安卓开发,热衷技术,在编程路上越走越远~


知识运用:

  1. 涉及到模板字符类型。
  2. 涉及到infer关键字使用。

题目分析:

题目地址:106-medium-trimleft

实现 ​​TrimLeft<T>​​ ,它接收确定的字符串类型并返回一个新的字符串,其中新返回的字符串删除了原字符串开头的空白字符串。

例如

type trimed = TrimLeft<'  Hello World  '> // 应推导出 'Hello World  '

题目解答:

测试用例:

  1. 通过我们设计的类型工具将输入的类型处理为预期的类型。
  2. 分别需要处理空白字符、换行符、制表符三种。

/* _____________ 测试用例 _____________ */
import type { Equal, Expect } from '@type-challenges/utils'

type cases = [
Expect<Equal<TrimLeft<'str'>, 'str'>>,
Expect<Equal<TrimLeft<' str'>, 'str'>>,
Expect<Equal<TrimLeft<' str'>, 'str'>>,
Expect<Equal<TrimLeft<' str '>, 'str '>>,
Expect<Equal<TrimLeft<' \n\t foo bar '>, 'foo bar '>>,
Expect<Equal<TrimLeft<''>, ''>>,
Expect<Equal<TrimLeft<' \n\t'>, ''>>,
]

答案及解析:

  1. 通过观察测试用例我们得到需要Trim的内容包括空白字符、换行符、制表符。
  2. 通过条件类型来判断S是否可分配给包含上述三种内容的模板字符类型中来判断。
  3. 如果依旧可分配的话依旧使用TrimLeft递归去除来得到无法分配给上述三种内容的S。
  4. 在输入类型上我们依旧使用泛型约束输入类型为String。

/* _____________ 答案 _____________ */

type TrimLeft<S extends string> = S extends `${" " | "\n" | "\t"}${infer Rest}`
? TrimLeft<Rest>
: S;

欢迎关注我的公众号“前端小鑫同学”,原创技术文章第一时间推送。

举报

相关推荐

0 条评论