去除左侧空白
题目
Github: TrimLeft
实现 TrimLeft<T>
,它接收确定的字符串类型并返回一个新的字符串, 其中新返回的字符串删除了原字符串开头的空白字符串。
type trimed = TrimLeft<' Hello World '> // 应推导出 'Hello World '
解题思路
这里我们需要使用 模板字面量类型 ,对 字符串进行建模。
我们需要处理两种情况,左边有空格的字符串和没有空格的字符串。 如果我们有空格,我们需要推断字符串的另一部分并再次检查它是否有空格,否则,我们返回推断的部分而不做任何更改。
type TrimLeft<S extends string> = S extends `${' '}${infer R}` ? TrimLeft<R> : S
除了需要检查 空格,还需要检查换行符和制表符。
答案
type TrimLeft<S extends string> =
S extends `${' ' | '\n' | '\t'}${infer R}` ? TrimLeft<R> : S
验证
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'>, ''>>,
]