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

TS2536报错:基于枚举生成映射类型时key无法索引枚举如何解决?

报错原因

你混淆了枚举类型和枚举值对象的类型:

  • COLORS 是枚举类型本身,本质是所有枚举成员值的联合类型(本例中就是字面量'#FF7900'的类型),本身不支持用枚举的键名做索引,所以触发TS2536报错
  • typeof COLORS 才是枚举值这个实际对象的类型,包含了键到值的完整类型映射,你需要索引的是这个类型

修正方案

直接修改映射类型中取值的索引对象即可:

enum COLORS {
  PRIMARY = '#FF7900',
}

type ColorsType = {
  [key in keyof typeof COLORS]: typeof COLORS[key]
}

interface ThemeColors extends ColorsType {}

更简化的写法

如果你不需要对映射规则做额外修改,不需要手动遍历键生成类型,直接复用typeof COLORS即可,效果和上面的写法完全一致:

enum COLORS {
  PRIMARY = '#FF7900',
  SECONDARY = '#000000'
}

type ColorsType = typeof COLORS
interface ThemeColors extends ColorsType {}

效果验证

最终得到的ThemeColors会严格和枚举的键值绑定:

  • 键必须和枚举定义的键完全一致,缺键、多键都会触发类型报错
  • 每个键对应的值必须是枚举成员的精确值,不允许赋值任意字符串,符合严格校验要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:00:01