如何使用TypeScript定义长度为1的字符串类型及字符数组类型
在TypeScript中定义长度为1的字符串类型及字符数组
定义长度为1的字符串类型
可以通过条件类型结合模板字面量实现严格的单字符类型约束,确保只有长度为1的字符串能匹配:
// 严格约束的单字符类型 type Char<T extends string> = T extends `${infer C}${infer Rest}` ? Rest extends '' ? C : never : never;
如果不需要泛型级别的严格检查,也可以用交叉类型快速定义(日常开发足够使用):
// 简洁版单字符类型 type Char = string & { length: 1 };
定义字符数组类型
有了Char类型后,字符数组的定义有两种方式:
直接声明数组类型
const chars: Char[] = [];
定义字符数组接口
interface CharArray extends Array<Char> {} const chars: CharArray = [];
遍历字符串存入字符数组的实践
TypeScript遍历字符串时,默认推断每个字符为string类型,需通过类型守卫或类型断言保证类型安全:
类型守卫(推荐,更严谨)
type Char = string & { length: 1 }; // 类型守卫函数,判断输入是否为单字符 function isChar(s: string): s is Char { return s.length === 1; } const str = 'hello world'; const chars: Char[] = []; for (const c of str) { if (isChar(c)) { chars.push(c); } }
类型断言(简洁场景下使用)
type Char = string & { length: 1 }; const str = 'hello world'; const chars: Char[] = []; for (const c of str) { chars.push(c as Char); }
内容的提问来源于stack exchange,提问作者ChunyuPCY
相关产品推荐
相关产品推荐

