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>;
要在我的主题中使用我的颜色枚举,我必须声明它的类型。
我试过这个:
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>;