TypeScriptのenumのドキュメント(TypeScript Deep Dive)をみていて、
調べていてちょっと気になることがありました。
文字列代入のときに値からキー取れるの?半信半疑なので試してみました。
RailsのEnumを使っている感じだといけそうだけどどうだろうかと。
まずは代入しないタイプのenumです。
enum FruitEnum { Banana, Melon } console.log(FruitEnum['Banana']) // 0 console.log(FruitEnum[0]) // Banana
次に代入型のenumです。
enum VegetablEnum { Tomato = 'red', Cabbage = 'green' }
これ見るといけなさそう…
Tomato: ‘red’みたいな記法だといけそうですけどね。
console.log(VegetablEnum.Tomato) // red console.log(VegetablEnum['red']) // undifined
取れませんね。
それぞれ出力して見ると、構造が違いました。
これ見ると、わかりやすいですね。
console.log(FruitEnum) // {0: "Banana", 1: "Melon", Banana: 0, Melon: 1} console.log(VegetablEnum) // {Tomato: "red", Cabbage: "green"}
ちなみにjsにするとこんな感じになっているみたいです。
var Sample; (function (Sample) { Sample[Sample["hoge"] = 0] = "hoge"; })(Sample || (Sample = {})); console.log(Sample['hoge']); // 1 var Simple; (function (Simple) { Simple["hoge"] = "fuga"; })(Simple || (Simple = {}));