TS2536:类型不能用于索引类型 ENUM - TS MAPPED TYPES

TS2536: Type cannot be used to index type ENUM - TS MAPPED TYPES

要在我的主题中使用我的颜色枚举,我必须声明它的类型。
我试过这个:

enum COLORS {
  PRIMARY = '#FF7900',
}

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

interface ThemeColors extends ColorsType {}

但我收到此错误:TS2536: Type 'key' cannot be used to index type 'COLORS'

如果我使用 string 而不是 COLORS[key],它可以工作,但我不希望该类型允许任何 COLORS 属性.[= 的任何字符串15=]

我们如何使用映射类型的枚举强制键等于它们的值?

值类型实际上应该是(typeof COLORS)[key]

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

type ColorsType = {
  [key in keyof typeof COLORS]?: typeof COLORS[key];
  // if not optional, all COLORS enum keys are required!
}

// These might be what you want
var colors: ColorsType = { PRIMARY: COLORS.PRIMARY }; // OK
var wrongColors: ColorsType = { PRIMARY: COLORS.SECONDARY }; // error!

编辑:解决方案可以进一步简化为:

type ColorsType = Partial<typeof COLORS>;