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

TypeScript类型定义引用常量失效?字面量联合类型却可行

TypeScript常量定义联合类型失效的原因

TypeScript的类型系统和值系统是完全分离的——类型只在编译阶段生效,属于编译时概念;而用const定义的ONE、TWO这类是运行时的具体值,两者不在同一个层面。

当你用字面量0 | 1 | 2定义联合类型时,这些字面量本身就是TypeScript类型系统里的合法元素,编译器能直接识别为字面量类型的联合。

但const ONE = 1这种写法创建的是值,不是类型。你试图在类型MyType里引用这些值的标识符时,TypeScript会默认把它们当成类型名称来查找,但这些标识符并没有对应的类型定义,所以会报错失效。

解决办法

如果想用常量来推导联合类型,有两种常用方式:

  • 用typeof获取单个常量的类型:
export const ONE = 1;
export const TWO = 2;
export const THREE = 3;
export type MyType = typeof ONE | typeof TWO | typeof THREE;
  • 把常量数组断言为只读字面量数组,再提取元素类型:
export const NUMBERS = [1, 2, 3] as const;
export type MyType = typeof NUMBERS[number];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 06:27:29