typescript - Hur kan jag iterera genom nycklarna i ett objekt när nycklarna inte är strängar?
För olika konfigurationer (parametrar etc.) i min app tycker jag om att använda objekt. Nycklarna i objekten är inte strängar, utan enums.
När nycklarna inte är strängar, hur kan jag iterera genom nycklarna och få varje nyckel som rätt enum-typ?
Exempel :
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?
})
Svar #1
Du kan använda en karta om du behöver att nyckeln ska vara något annat än en sträng.
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);Ett annat alternativ är att omvandla colorsKeyStr till ett nummer.
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;
})Svar #2
colorKeyStr returnerar nyckeln som är ett nummer. Du kan använda numret för att hitta posten i det faktiska enumet, med syntaxen 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
})