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

如何通过TypeScript高级类型从现有枚举生成大写值枚举?

关于TypeScript通过高级类型生成大写值枚举的问题

结论:无法通过高级类型直接生成新的枚举

TypeScript的高级类型(包括Uppercase这类字符串字面量工具)仅作用于类型系统层面,编译后不会生成任何运行时代码。而枚举是编译时会转换为JavaScript对象的值层面结构,类型工具无法直接生成这种运行时存在的枚举实体。

你当前定义的OrderStateUppercase只是一个类型别名,仅能用于类型约束,无法像枚举那样作为值在代码中使用。

替代方案:用对象+类型模拟枚举

如果不想手动维护两份枚举,可以通过运行时代码生成对应大写值的对象,同时搭配类型定义来实现类似枚举的效果:

// 原枚举
export enum OrderState {
  stateA = "State_A",
  stateB = "State_B"
}

// 运行时生成大写值的对象,同时通过类型约束确保值的正确性
export const OrderStateUpper = Object.fromEntries(
  Object.entries(OrderState).map(([key, value]) => [key, value.toUpperCase()])
) as {
  [K in keyof typeof OrderState]: Uppercase<typeof OrderState[K]>
};

// 导出对应的类型,用于类型约束
export type OrderStateUpper = typeof OrderStateUpper[keyof typeof OrderStateUpper];

这种方式下,OrderStateUpper对象拥有和目标枚举完全一致的结构,值均为大写格式,同时对应的类型也能提供和原生枚举相同的类型检查能力,无需手动重复定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:26:12