TypeScriptでEnumとconst使うときのundefinedエラー

概要
TypeScriptでenum扱ってるとなんだかトランスパイルは上手くいくのに、実際に動かすとundefined的なエラーが出ちゃう問題
Playgroundで検証した様子

原因
enumをconstで定義するとトランスパイル時は問題ないけど、実行時に参照すると上手くいかないらしい。
constとenumは合わせ技で使わないようにする。const使わず素直にexport enum Enum{}的に使うか。。。

例1
enumをconstで宣言すると、実行時には上手く読めない。

enum Enum{
    Hoge = 1
}

const enum ConstEnum{
    Hoge = 1
}

class Sample{
    public test() {
        return Enum.Hoge;
    }    
    public testConst() {
        return ConstEnum.Hoge;
    }
}

const sample = new Sample();

console.log("normal enum: " + sample.test());
console.log("const enum: " + sample.testConst);


/* consoleへの出力結果 */
normal enum: 1                          VM35396:23
const enum: function () {               VM35396:24
        return 1 /* Hoge */;
    }

例2
enumを呼び出す変数がconstで定義されててもダメらしい。
私はこれでつまずいた。

enum Enum{
    Hoge = 1
}

const value = {
    fuga: Enum.Hoge,
}

class Sample{
    public test() {
        return Enum.Hoge;
    }    

    public testConstVar() {
        return value;
    }
}

const sample = new Sample();

console.log("normal enum: " + sample.test());
console.log("const var: " + sample.testConstVar);


/* consoleへの出力結果 */
normal enum: 1                          VM35396:23
const var: function () {                VM35396:25
        return value;
    }


この記事が気に入ったらサポートをしてみませんか?