You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中如何将字符串字面量联合类型转换为数字字面量联合类型

TypeScript 字符串字面量联合类型转数字字面量联合类型方案

可以实现该转换,在TypeScript 4.8及更高版本中,可借助模板字面量类型的数字推断能力完成需求。


核心转换泛型

type StringToNumber<T extends string> = T extends `${infer Num extends number}` ? Num : never;

基础使用示例

对应你给出的示例,直接传入字符串联合类型即可得到目标数字联合类型:

type A = '7' | '8' | '9'
type B = StringToNumber<A>
// 等价于 type B = 7 | 8 | 9

支持的数字格式

该转换逻辑支持任意合法的数字格式字符串,不限于单数字、正整数:

type TestStr = '-123' | '3.1415926' | '1008611'
type TestNum = StringToNumber<TestStr>
// 等价于 type TestNum = -123 | 3.1415926 | 1008611

注意事项

  • 如果传入的字符串联合中包含无法解析为数字的成员,该成员会被转换为never,最终联合类型会自动过滤never,相当于自动排除非数字字符串:
    type MixStr = '12' | '非数字' | '45.6'
    type MixNum = StringToNumber<MixStr>
    // 等价于 type MixNum = 12 | 45.6
    
  • 若字符串对应的数字超出JavaScript Number类型的安全精度范围,转换后会遵循JS的数字精度规则,可能出现精度丢失。
  • 低于4.8的TypeScript版本不支持infer 泛型 extends 类型的语法,需要升级TS版本后使用该方案。

内容的提问来源于stack exchange,提问作者loveyunk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:39:03