To avoid paying the cost of extra generated code and additional indirection when accessing enum values,
it’s possible to use const enums.
Define the const enums in typescript as like below:
The line var objITComp = ITCompanies.TSInfo;
is compiled to the JavaScript var objITComp = ITCompanies.TSInfo;
(this output is the same as input).
This means that at execution the runtime will need to lookup "ITCompanies" and then "ITCompanies.TSInfo".
To get a performance boost here you can mark the enum as a “const enum“. This is demonstrated below: 545/5000
enum値にアクセスするときに余分な生成コードと追加の間接化のコストを払うのを避けるために、 const enumを使うことが可能です。
以下のようにtypescriptでconst enumを定義します。
var objITComp = ITCompanies.TSInfo;
JavaScriptにコンパイルされます
var objITComp = ITCompanies.TSInfo;
(この出力は入力と同じです)。
これは、実行時にランタイムが「ITCompanies」を検索してから「ITCompanies.TSInfo」を検索する必要があることを意味します。
ここでパフォーマンスを向上させるには、この列挙型を「定数列挙型」としてマークします。 これを以下に示します。
enum ITCompanies {
Wipro,
Infosys,
TSInfo,
}
var objITComp = ITCompanies.TSInfo;
// console.log(objITComp)
生成されるJSの量が違う。こんなに。
"use strict";
var ITCompanies;
(function (ITCompanies) {
ITCompanies[ITCompanies["Wipro"] = 0] = "Wipro";
ITCompanies[ITCompanies["Infosys"] = 1] = "Infosys";
ITCompanies[ITCompanies["TSInfo"] = 2] = "TSInfo";
})(ITCompanies || (ITCompanies = {}));
var objITComp = ITCompanies.TSInfo;
console.log(objITComp); // 2
const enum ITCompanies2 {
Wipro,
Infosys,
TSInfo,
}
var objITComp2 = ITCompanies2.TSInfo;
console.log(objITComp2); // 2
生成されるJSの量が違う。これだけ。
var objITComp2 = 2 /* TSInfo */;
console.log(objITComp2);