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