【问题标题】:TS2536: Type cannot be used to index type ENUM - TS MAPPED TYPESTS2536:类型不能用于索引类型 ENUM - TS MAPPED TYPES
【发布时间】:2021-10-24 19:39:58
【问题描述】:

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

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 属性。

我们如何强制键与映射类型的枚举值相等?

【问题讨论】:

    标签: typescript enums mapped-types


    【解决方案1】:

    值类型实际上应该是(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>;
    

    【讨论】:

      猜你喜欢
      • 2017-05-23
      • 1970-01-01
      • 2023-01-20
      • 1970-01-01
      • 2022-11-11
      • 2021-07-18
      • 2022-11-15
      • 2018-04-01
      • 2017-12-04
      相关资源
      最近更新 更多