Skip to content

Instantly share code, notes, and snippets.

@kenmori
Last active July 16, 2019 11:55
Show Gist options
  • Save kenmori/0a49d4363ae1e7c3cc1ffa1d3cbd58be to your computer and use it in GitHub Desktop.
Save kenmori/0a49d4363ae1e7c3cc1ffa1d3cbd58be to your computer and use it in GitHub Desktop.
enum(列挙型) vs const enum(定数列挙型)の違い

enum(列挙型) vs const enum(定数列挙型)の違い

ref

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」を検索する必要があることを意味します。

ここでパフォーマンスを向上させるには、この列挙型を「定数列挙型」としてマークします。 これを以下に示します。

playground

列挙型

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);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment