TypescriptではCやJavaなどでもお馴染みのenumがサポートされているけど、string literalを使うことでコードの記述量の削減、コンパイル後のオブジェクト数の削減ができますよという話。
以下、具体例。
// A.ts
export enum Enum {
Hoge = 'hoge',
Fuga = 'fuga'
}
function enumFunc(val: Enum) {}
function typeFunc(val: 'hoge' | 'fuga') {} // inlineで書くこともできる
// B.ts
// import {
// Enum, // import必須
// enumFunc,
// typeFunc
// } from './A.ts'
enumFunc(Enum.Hoge) // importしたenumを使わないといけない
typeFunc('hoge') // typeのimportがいらない
これがjavascriptにコンパイルされると
// A.ts
export var Enum;
(function (Enum) {
Enum["Hoge"] = "hoge";
Enum["Fuga"] = "fuga";
})(Enum || (Enum = {}));
function enumFunc(val) { }
function typeFunc(val) { } // inlineで書くこともできる
// B.ts
// import {
// Enum, // import必須
// enumFunc,
// typeFunc
// } from './A.ts'
enumFunc(Enum.Hoge); // importしたenumを使わないといけない
typeFunc('hoge'); // typeのimportがいらない
になる。Enumオブジェクトが増えてしまっている。