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

如何创建继承已有枚举属性的TypeScript新枚举?

TypeScript 实现枚举的“继承”效果

TypeScript 原生不支持枚举使用 extends 语法,也没法在枚举内部用展开运算符继承已有成员,但可以通过以下两种方式实现类似继承的效果,满足你访问 Enum2.a 并继承其值的需求:

方法一:对象合并 + 类型别名

枚举编译后本质是 JS 对象,我们可以通过对象展开合并原有枚举的成员,再配合类型别名实现类型约束:

enum Enum1 {
  a = 'a'
}

// 合并枚举成员到新对象
const Enum2 = {
  ...Enum1,
  b: 'b'
} as const;

// 定义类型,包含原有枚举和新成员
type Enum2 = Enum1 | typeof Enum2.b;

这样你可以直接访问 Enum2.a 和 Enum2.b,同时类型检查会正常生效。

方法二:联合类型 + 约束对象

如果需要更严格的类型约束,可以先定义包含原有枚举的联合类型,再创建对应的对象:

enum Enum1 {
  a = 'a'
}

// 定义联合类型,涵盖原有枚举和新成员
type Enum2Type = Enum1 | 'b';

// 创建对象并约束类型
const Enum2 = {
  ...Enum1,
  b: 'b'
} as { [K in Enum2Type]: K };

这种方式同样能实现需求,且类型层面的约束更严谨。

注意点

  • 字符串枚举编译后没有反向映射,合并后的对象也不会有;如果是数字枚举,合并时要注意反向映射的冲突问题,不建议轻易这么做。
  • 以上是模拟枚举继承的效果,并非类那样的真正继承,但完全能满足你的使用场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:42:33