Skip to content

TrimRight

约 387 字大约 1 分钟

2022-12-01

题目

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

参考