Per me un modo più semplice, pratico e diretto per capire cosa sta succedendo, è che la seguente elencazione:
enum colors { red, green, blue };
saranno convertiti essenzialmente a questo:
var colors = { red: 0, green: 1, blue: 2,
[0]: "red", [1]: "green", [2]: "blue" }
A causa di questo, sarà vero il seguente:
colors.red === 0
colors[colors.red] === "red"
colors["red"] === 0
Questo crea un modo semplice per ottenere il nome di un enumerati come segue:
var color: colors = colors.red;
console.log("The color selected is " + colors[color]);
Si crea anche un bel modo per convertire una stringa in un valore enumerato.
var colorName: string = "green";
var color: colors = colors.red;
if (colorName in colors) color = colors[colorName];
Le due situazioni di cui sopra sono di gran lunga la situazione più comune, perché di solito siete molto più interessato in nome di un valore specifico e serializzazione dei valori in modo generico.
fonte
2016-09-11 18:52:38
E infatti, a macchina corrente , se hai un 'const enum' questo non funzionerà, dato che' const enum's è in linea e non esiste alcun oggetto di ricerca per loro. Solo qualcosa a cui fare attenzione per – JKillian
Sì. La mia risposta è un po 'datata (2013); il più recente TypeScript potrebbe non comportarsi allo stesso modo. –
Per essere chiari, la risposta sopra funziona ancora a partire da TS 2.3. Tuttavia, se si utilizza "const enum", piuttosto che solo "enum", solo allora non funzionerà. L'uso di const enum sta fondamentalmente dicendo a TS di fare una ricerca e sostituzione; in ogni posto in cui usi MyEnum.Foo, verrà sostituito con un valore numerico corrispondente. –