携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
中等
Trim Right(删除结尾空白符)
type Space = ' ' | '\n' | '\t';
type TrimRight<S extends string> = S extends `${infer R}${Space}` ? TrimRight<R> : S;
// 使用示例
type Trimed = TrimLeft<' Hello World '> // 应推导出 ' Hello World'
跟 Trim Left 的逻辑是一样的
使用模板字符串来匹配S,从而将尾部符合Space类型的字符串一个个地干掉。
去除数组指定元素(lodash.without())
type ValueOf<T> = T extends [...any] ? T[number] : T;
type Without<T, U extends number[] | number> =
T extends [infer F, ...infer E]
? F extends ValueOf<U>
? [...Without<E, U>]
: [F, ...Without<E, U>]
: T;
// 使用示例
type Res = Without<[1, 2], 1>; // expected to be [2]
type Res1 = Without<[1, 2, 4, 1, 5], [1, 2]>; // expected to be [4, 5]
- 迭代数组
T,对元素F进行处理,符合条件就保留,否则丢弃 - 然后调用
Without继续处理下一个元素,知道迭代完毕
解答思路如图:
Trunc (Math.trunc())
type Trunc<S extends string | number> =
`${S}` extends `${infer F}.${string}`
? F
: `${S}`;
// 使用示例
type A = Trunc<12.34> // '12'
type B = Trunc<'1.234'> // '1'
- 先将
S转为字符串类型 - 利用模板字符串的特性完成小数匹配
- 根据判断条件返回对应的字符串即可