关键词: TypeScript, TypeChallenge
像 JS 中的String.length一样, 计算一个字符串类型字面量的长度
举个栗子
type L = Length<"hello">; // expected to be 5type Split<S extends string, Arr extends string[] = []> = S extends `${infer F}${infer R}`
? Split<R, [...Arr, F]>
: Arr
type Length<S extends string> = Split<S>["length"]我的第一反应是直接返回S["length"], 但是这个结果是number而不是某个确切的数字
所以, 字符串是没法获得其长度的, 但是数组可以, 我们现在要做的就是把字符串变成数组即可, 关键就是实现这个工具类Split
我们可以用一个数组来保存已经拆分好了的结果, 每次拆出第一个字母放入其中, 再递归地拆分剩余部分, 直到将字符串 拆分完返回所保存的数组即可. 代码如下:
type Split<S extends string, Arr extends string[] = []> = S extends `${infer F}${infer R}`
? Split<R, [...Arr, F]>
: Arr而Length类的实现就简单了:
type Length<S extends string> = Split<S>["length"];