挑战
实现Trim<T>,它接受一个明确的字符串类型,并返回一个新字符串,其中两端的空白符都已被删除。
例如
type trimed = Trim<' Hello World '>; // expected to be 'Hello World'解答
这道题最简单粗暴的方式,直接在上一题 TrimLeft 的基础上,再加一步 TrimRight 就可以了。
type TrimLeft<S extends string> = S extends `${Space}${infer Rest}`
? TrimLeft<Rest>
: S;
type TrimRight<S extends string> = S extends `${infer Rest}${Space}`
? TrimRight<Rest>
: S;
type Trim<S extends string> = TrimRight<TrimLeft<S>>;但我们可以把这个实现优化一下,通过使用联合类型模式匹配来同时处理字符串两端的空白符,从而减少递归次数,提高效率。
type Trim<S extends string> = S extends
| `${Space}${infer Rest}`
| `${infer Rest}${Space}`
? Trim<Rest>
: S;