Iterera över en enum med TypeScript och tilldela till en enum
Jag försöker iterera över alla värden i ett enum och tilldela varje värde till ett nytt enum. Det här är vad jag kom fram till....
enum Color {
Red, Green
}
enum Suit {
Diamonds,
Hearts,
Clubs,
Spades
}
class Deck
{
cards: Card[];
public fillDeck() {
for (let suit in Suit) {
var mySuit: Suit = Suit[suit];
var myValue = 'Green';
var color : Color = Color[myValue];
}
}
}
Delen var mySuit: Suit=Suit[suit]; kompileras inte och ger felet Type 'string' is not assignable to type 'Suit'.
Om jag hovrar över suit i for-loopen visar det mig let suit: string. var color : Color=Color[myValue]; kompilerar också utan fel. Vad gör jag fel här då båda exemplen med Suit och Color ser identiska ut för mig.
Jag använder TypeScript version 2.9.2 och detta är innehållet i min tsconfig.json
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"sourceMap": true
}
}
Finns det ett bättre sätt att iterera över alla värden i en enum, samtidigt som enumtypen bevaras för varje iteration?
Tack,
Svar #1
För strängenum, om strict-flaggan är på, får vi type string can't be used to index type 'typeof Suit'. Så vi måste göra något liknande:
for (const suit in Suit) {
const mySuit: Suit = Suit[suit as keyof typeof Suit];
}
Om du bara behöver string-värdet av det, då går det bra att använda suit direkt.
Svar #2
Du kan antingen använda detta hack:
const mySuit: Suit = Suit[suit] as any as Suit;
eller ändra Suit-enum till en strängenum och använd den så här:
enum Suit {
Diamonds = "Diamonds",
Hearts = "Hearts",
Clubs = "Clubs",
Spades = "Spades",
}
for (let suit in Suit) {
const mySuit: Suit = Suit[suit] as Suit;
}
