如何使用TypeScript类型获取字符串的长度?
实现TypeScript字符串长度数字类型
要实现LengthOfString来获取字符串字面量的数字类型长度,核心思路是利用TypeScript的递归条件类型和模板字符串推断,通过辅助数组累计字符数量:
type LengthOfString<S extends string, T extends any[] = []> = S extends `${infer First}${infer Rest}` ? LengthOfString<Rest, [...T, First]> : T['length'];
测试用例
type Length = LengthOfString<"hello">; // 类型为5 type EmptyStrLength = LengthOfString<"">; // 类型为0 type LongStrLength = LengthOfString<"typescript type system">; // 类型为20
实现逻辑拆解
- 泛型参数定义:
S约束为字符串字面量,T是辅助数组(默认空数组),用来记录已遍历的字符个数。 - 字符串拆分:通过
${infer First}${infer Rest}模板字符串推断,把输入字符串拆分成第一个字符First和剩余字符串Rest。 - 递归计数:如果能拆分出字符,就递归调用
LengthOfString,传入剩余字符串,并把当前字符加入辅助数组(数组长度+1)。 - 终止条件:当字符串被拆分为空时,辅助数组的
length属性就是原字符串的长度,直接返回这个数字类型。
注意事项
- 这个实现依赖TypeScript 4.0及以上版本的特性(模板字符串推断、递归条件类型)。
- TypeScript对递归类型的深度有默认限制(约1000层),超长字符串会触发类型错误,普通场景下这个实现足够覆盖需求。
内容的提问来源于stack exchange,提问作者Tristan F.-R.
相关产品推荐
相关产品推荐

