TypeScript const enum と enum の違い

enum の場合、JavaScriptに変換されると以下のような少し理解しづらいオブジェクトになります。

enum MyEnum {
  'Hoge',
  'Foo',
  'Bar'
}

console.log(MyEnum.Hoge)
console.log(MyEnum.Foo)
console.log(MyEnum.Bar)
"use strict";
var MyEnum;
(function (MyEnum) {
    MyEnum[MyEnum["Hoge"] = 0] = "Hoge";
    MyEnum[MyEnum["Foo"] = 1] = "Foo";
    MyEnum[MyEnum["Bar"] = 2] = "Bar";
})(MyEnum || (MyEnum = {}));
console.log(MyEnum.Hoge);
console.log(MyEnum.Foo);
console.log(MyEnum.Bar);

一方で、const enum の場合はこのようなオブジェクトは作成されません。

const enum MyEnum {
  'Hoge',
  'Foo',
  'Bar'
}

console.log(MyEnum.Hoge)
console.log(MyEnum.Foo)
console.log(MyEnum.Bar)
"use strict";
console.log(0 /* Hoge */);
console.log(1 /* Foo */);
console.log(2 /* Bar */);