如何基于不可修改的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
相关产品推荐
相关产品推荐

