TypeScript enumの逆引きの落とし穴
TypeScriptのenumは落とし穴がいくつかあり、利用することを控えた方が良いとされていますが、今回は逆引きについてです。
例です。
enum MyEnum {
'Hoge',
'Foo',
'Bar'
}
let a = MyEnum.Hoge // MyEnum
let b = MyEnum[1] // 逆引き bはstringと推論される
let c = MyEnum[3] // 逆引き 存在しないはずなのにコンパイルエラーにならない
console.log(b) // 'Foo'
console.log(c) // undefined になる
問題はMyEnum[3]です。
MyEnum[3]は存在しないにもかかわらずコンパイルエラーにはなりません。
そして、JavaScriptの実行結果は undefined になります。
存在しないindexで逆引きをしている場合は、コンパイルエラーになるのが自然に思えます。
なぜなら、存在しないindexを指定してundefinedを得ようと思うケースがほぼないからです。
最近のコメント