javascript - Iterere over enums TypeScript
Jeg prøver å iterere over denne enumen. Men jeg støter på problemer med å hente verdier fra enumen. Jeg kan hente verdien hvis jeg gir den en hardkodet streng som dette.
export enum Values {
ACE = 'A',
TWO = '2',
THREE = '3',
FOUR = '4',
FIVE = '5',
SIX = '6',
SEVEN = '7',
EIGHT = '8',
NINE = '9',
TEN = '10',
JACK = 'J',
QUEEN = 'Q',
KING = 'K',
}
console.log(Values['TWO']);
Men så snart jeg gir det de flere strengverdiene fra enumen som nedenfor.
export enum Values {
ACE = 'A',
TWO = '2',
THREE = '3',
FOUR = '4',
FIVE = '5',
SIX = '6',
SEVEN = '7',
EIGHT = '8',
NINE = '9',
TEN = '10',
JACK = 'J',
QUEEN = 'Q',
KING = 'K',
}
for (let value in Values) {
console.log(Values[value]);
}
Det gir følgende feil:
error TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'typeof Values'.
No index signature with a parameter of type 'string' was found on type 'typeof Values'.
25 console.log(Values[value]);
Helt ny på TypeScript, så kan hende jeg går glipp av noe.
Skål til alle som kunne gitt meg litt veiledning.
Svar #1
Typen til løkkevariabelen mens man itererer ved bruk av for-in-løkke over enum Values er implisitt any, så du får kompilasjonsfeilen.
for (let value in Values) {
console.log(Values[value]);
}
Variabelen value er av typen any, som ikke kan brukes til å indeksere enum Values.
Åpne sak i TypeScript her.
Hvis du vil iterere over nøkkel-verdi-parene til enum, kan du gjøre det med hjelp av Object.entries:
enum Values {
ACE = 'A',
TWO = '2',
THREE = '3',
FOUR = '4',
FIVE = '5',
SIX = '6',
SEVEN = '7',
EIGHT = '8',
NINE = '9',
TEN = '10',
JACK = 'J',
QUEEN = 'Q',
KING = 'K',
}
//Both key and value
Object.entries(Values).forEach(([key, value]) => {
console.log(key, value)
});
//keys
Object.keys(Values).forEach(key => {
console.log(key);
});
//values
Object.values(Values).forEach(value => {
console.log(value);
});
