TypeScript中能否通过编程将字符串数字字面量类型转换为对应数字类型?
TypeScript 字符串字面量联合转数字字面量联合实现方案
该操作完全可以实现,仅需使用 TypeScript 4.1 及以上版本提供的模板字面量类型+条件类型特性即可完成。
具体实现步骤
1. 定义通用转换类型工具
// 泛型约束传入的内容必须是字符串类型 type StringToNum<T extends string> = T extends `${infer Num extends number}` ? Num : never;
2. 调用工具完成转换
// 你的原始字符串联合类型 type OriginUnion = "1" | "2" | "3"; // 转换后的数字联合类型,结果为 1 | 2 | 3 type TargetUnion = StringToNum<OriginUnion>;
实现原理解释
- 条件类型默认支持联合类型分发:当传入的泛型参数是联合类型时,判断逻辑会逐一对每个成员执行,最后把所有成员的执行结果合并为新的联合类型
- 模板字面量的
infer Num extends number语法可以直接将符合数字格式的字符串字面量,自动推断为对应的数字字面量类型,不符合数字格式的字符串会返回never,自动被过滤出最终的联合结果
注意:如果原始联合类型中包含非数字格式的字符串成员(例如
"a"、"12b"等),转换后这些成员会被过滤,不会出现在最终的数字联合类型中。如果需要保留或对非法格式做提示,可以自行调整工具类型的分支逻辑。
内容的提问来源于stack exchange,提问作者Michiel de Vos
相关产品推荐
相关产品推荐

