2014-09-10 9 views

Antwort

8

Dieser Teil der Sprachspezifikation ist (3.2.7 Enum-Typen):

Enum Typen der Anzahl Urtyp zuweisbar sind, und vice versa , aber verschiedene enum-Typen sind zueinander nicht zuweisbar

so dass die Entscheidung implizite Konvertierung zwischen number und Enum und umgekehrt überlegt ist zu ermöglichen.

Dies bedeutet, dass Sie sicherstellen müssen, dass der Wert gültig ist.

function test(x: xEnum) { 
    if (typeof xEnum[x] === 'undefined') { 
     alert('Bad enum'); 
    } 
    console.log(x); 
} 

Obwohl Sie bei der Umsetzung nicht zustimmen könnten, ist es erwähnenswert, dass Aufzählungen in diesen drei Situationen nützlich sind:

// 1. Enums are useful here: 
test(xEnum.X2); 

// 2. ...and here 
test(yEnum.X2); 

Und 3. - wenn Sie test( gibt es Ihnen sagen, die Enum Geben Sie einen Typ ein, mit dem Sie sicherstellen können, dass Sie einen auswählen, der existiert.

+0

ok, thx für die aus zeigt. Ist das eine kluge Entscheidung? Ich meine, in diesem Fall hat der Enum-Typ überhaupt keinen Nutzen. – duedl0r

+1

Es ist klug in dem Sinne, dass Sie meist mit Webservern arbeiten und dann ist es nur eine Nummer – basarat

+0

Ich habe drei Fälle hinzugefügt, in denen Enums besser als Zahlen sind. Ich weiß, wenn es Ihren Fall nicht behandelt (und es könnte tun, wenn die Sprachspezifikation geändert wurde, um die implizite "Zahl" -> "enum" Umwandlung zu entfernen), gibt es noch einige nützliche Gründe, sie zu verwenden. Sie sind nicht "schlecht", nur "nicht so perfekt, wie Sie möchten" :) – Fenton