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

TypeScript如何复制枚举指定成员以避免类型比较错误?

解决TypeScript不同枚举值相等但类型不兼容的问题

在TypeScript中,即使两个枚举的字面量值完全一致,它们的类型依然是独立的,直接比较会触发类型错误。要创建仅包含Test中CUSTOMERS和CASHFLOW成员的Test2并消除比较错误,可采用以下两种方案:

方案1:用const对象+类型别名模拟枚举(推荐)

这种方式直接复用原枚举的成员值和类型,从根源上保证类型兼容:

enum Test {
  CUSTOMERS = 'CUSTOMERS',
  CASHFLOW = 'CASHFLOW',
  SUPPLIERS = 'SUPPLIERS',
  DEBTS = 'DEBTS',
}

// 定义Test2的成员类型为Test的子集
type Test2 = Pick<typeof Test, 'CUSTOMERS' | 'CASHFLOW'>;

// 创建Test2对象,复用Test的成员值
const Test2: Test2 = {
  CUSTOMERS: Test.CUSTOMERS,
  CASHFLOW: Test.CASHFLOW,
} as const;

// 此时比较不会触发类型错误
if (Test.CUSTOMERS === Test2.CUSTOMERS) {
  console.log("值相等,类型兼容");
}

方案2:坚持使用枚举类型

如果必须用枚举定义Test2,可以复用Test的成员值,再通过以下方式消除比较错误:

enum Test {
  CUSTOMERS = 'CUSTOMERS',
  CASHFLOW = 'CASHFLOW',
  SUPPLIERS = 'SUPPLIERS',
  DEBTS = 'DEBTS',
}

// 复用Test的成员值定义Test2枚举
enum Test2 {
  CUSTOMERS = Test.CUSTOMERS,
  CASHFLOW = Test.CASHFLOW,
}

// 方法A:使用类型断言
if (Test.CUSTOMERS === Test2.CUSTOMERS as Test.CUSTOMERS) {
  console.log("值相等");
}

// 方法B:转为字符串类型后比较
if (Test.CUSTOMERS === String(Test2.CUSTOMERS)) {
  console.log("值相等");
}

方案1无需额外的类型断言操作,更符合TypeScript的类型安全原则,是优先推荐的实现方式。

内容的提问来源于stack exchange,提问作者Gaylord.P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:38:23