Skip to content

去除左侧空白

约 389 字大约 1 分钟

2022-12-01

题目

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'>, ''>>,
]

参考