对于我的应用程序中的各种配置(参数等),我喜欢使用对象。对象的键不是字符串,而是枚举。
当键不是字符串时,如何遍历键并将每个键作为正确的枚举类型获取?
示例:
enum Color {
RED = 1
}
let colorNames: { [key in Color]?: string } = {
[Color.RED]: "red"
}
Object.keys(colorNames).forEach(colorsKeyStr => {
let colorNum: Color = colorsKeyStr // <-- produces error
// What's the proper way to cast a "color" variable to the "Color" enum type?
})
答案 0 :(得分:5)
如果您需要密钥是字符串,则可以使用map。
enum Color {
RED = 1,
}
const colorNames: Map<Color, string> = new Map();
colorNames.set(Color.RED, "red");
// Looping over map
colorNames.forEach((value, key) => {
console.log("key", key); // Expected: 1
console.log("value", value); // Expected: "red"
});
// Get single value
const red = colorNames.get(Color.RED);
另一种选择是将colorsKeyStr
强制转换为数字。
enum Color {
RED = 1
}
let colorNames: { [key in Color]?: string } = {
[Color.RED]: "red"
}
Object.keys(colorNames).forEach(colorsKeyStr => {
const index = Number(colorsKeyStr);
let colorNum: Color = index;
})
答案 1 :(得分:1)
colorKeyStr
返回数字键。您可以使用Enum[enumValue]
语法使用数字查找实际枚举的条目。
enum Color {
RED = 1
}
let colorNames: {
[key in Color] ? : string
} = {
[Color.RED]: "red"
}
Object.keys(colorNames).map(colorName => Color[Number(colorName)]
).forEach(color => {
console.log(color);
// You will get the correct color from your enum, but the type is still incorrect
})