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

如何基于不可修改的Record类型创建指定数值联合类型?

解决方案

问题核心在于你给Teenager标注的Record<string, Record<string, number>>类型,把值的类型宽泛地限定为number,导致TypeScript丢失了具体数值字面量的信息,直接提取得到的是number而非目标联合类型。

要在不修改原常量类型注解的前提下拿到目标联合类型,可以通过as const断言强制TypeScript重新推导最窄的字面量类型:

// 先将原常量断言为只读字面量类型,保留具体数值信息
const TeenagerLiteral = Teenager as const;

// 提取universal对象的所有值类型,得到13 | 14 | 15 | 16 | 17 | 18 | 19
type Age = typeof TeenagerLiteral.universal[keyof typeof TeenagerLiteral.universal];

验证一下:此时如果给类型为Age的变量赋值非13-19的数值,TypeScript会直接抛出类型错误,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:48:16