BFE-TS TypeScript类型体操练习 41- 50
题目来自TypeScript题目 | BFE.dev - 前端刷题,准备前端面试拿到心仪的Offer,总共60题,带你完爆类型体操!
常用工具类型 41-44
-
实现 LengthOfString<T>
实现
LengthOfString<T>
用以返回字符串长度。type A = LengthOfString<'BFE.dev'> // 7 type B = LengthOfString<''> // 0
答案:
-
转为元组后直接访问泛型的.length属性
type StringToTuple<T extends string> = T extends `${infer L}${infer R}` ? [L, ...StringToTuple<R>] : []; type LengthOfString<T extends string> = StringToTuple<T>['length'];
-
辅助数组统计长度
type LengthOfString< T extends string, U extends 0[] = [] > = T extends `${infer A}${infer B}` ? LengthOfString<B, [0, ...U]> : U["length"];
-
-
实现 LengthOfTuple<T>
实现
LengthOfTuple<T>
返回tuple type的长度。type A = LengthOfTuple<['B', 'F', 'E']> // 3 type B = LengthOfTuple<[]> // 0
答案:
直接访问泛型的.length属性
type LengthOfTuple<T extends any[]> = T["length"]
-
实现 StringToTuple<T>
实现
StringToTuple<T>
将字符串拆散为tuple,类似String.prototype.split('')
效果type A = StringToTuple<'BFE.dev'> // ['B', 'F', 'E', '.', 'd', 'e','v'] type B = StringToTuple<''> // []
答案:
type StringToTuple<T extends string> = T extends `${infer A}${infer B}` ? [A, ...StringToTuple<B>] : []
-
实现 LastItem<T>
FirstItem<T>
类似,请实现LastItem<T>
用以返回tuple的最后一个typetype A = LastItem<[string, number, boolean]> // boolean type B = LastItem<['B', 'F', 'E']> // 'E' type C = LastItem<[]> // never
答案:
type LastItem<T extends any[]> = T extends [...infer Firsts, infer Last] ? Last : never
相类似的
type LastItem<T extends any[]> = T extends [...any[], infer M] ? M : never;