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

TypeScript 4.9.5中如何检测枚举作为对象键的重复属性错误?

解决TypeScript 4.9.5中枚举作为对象键的重复属性检测问题

方法1:用辅助函数约束对象创建

定义一个返回指定类型的辅助函数,将对象字面量作为参数传入,TypeScript 4.9.5会对函数参数里的重复计算属性触发错误提示:

enum TestEnum {
  value1 = 'value1',
  value2 = 'value2',
}

// 辅助函数,约束输入对象必须匹配枚举键的类型
function createEnumRecord<T extends string>(obj: Record<T, number>): Record<T, number> {
  return obj;
}

// 此处重复的[TestEnum.value1]会被TS检测到错误
const variable = createEnumRecord<TestEnum>({
  [TestEnum.value1]: 5,
  [TestEnum.value2]: 7,
  [TestEnum.value1]: 9, // 错误:重复的属性
});

方法2:启用ESLint的no-dupe-keys规则

ESLint的no-dupe-keys规则可以检测对象字面量中所有重复的键,包括计算属性形式的枚举键,不受TypeScript版本限制。

在ESLint配置中启用该规则:

{
  "rules": {
    "no-dupe-keys": "error"
  }
}

启用后,代码里的重复计算属性会被ESLint标记为错误,能在开发阶段提前发现问题。

方法3:拆分键值对后合并(从写法上规避重复)

先分别定义每个枚举键对应的键值对,再通过对象展开或Object.assign合并,从写法上降低重复赋值的概率:

enum TestEnum {
  value1 = 'value1',
  value2 = 'value2',
}

const value1Entry = { [TestEnum.value1]: 5 };
const value2Entry = { [TestEnum.value2]: 7 };

// 合并后不会出现重复键,若重复定义entry会被覆盖,但写法更易排查
const variable = { ...value1Entry, ...value2Entry } as { [key in TestEnum]: number };

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:33:21