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
相关产品推荐
相关产品推荐

