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

TypeScript模板字面量类型如何推断得到数值字面量类型?

解决方案

TypeScript 4.8及以上版本支持直接在模板字面量的infer语法中添加数字类型约束,可一步得到数值字面量联合类型:

// 第三方库类型定义
type T = null | "auto" | "text0" | "text1" | "text2" | "text3" | "text4";

// 直接提取得到 0 | 1 | 2 | 3 | 4 类型
type N = Extract<T, `text${number}`> extends `text${infer R extends number}` ? R : never;

如果你的项目使用的是低于4.8的TS版本,可以额外封装一个字符串转数字的工具类型实现:

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

// 原提取逻辑得到的字符串联合
type StrN = Extract<T, `text${number}`> extends `text${infer R}` ? R : never;
// 转换为数值联合
type N = StringToNumber<StrN>;

原写法失效原因

你之前尝试用& number的方式不生效,是因为infer R得到的是字符串字面量类型,字符串类型和number类型的交叉结果为never,自然无法得到预期类型。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:18:03