[TypeScript] 列挙型

スポンサーリンク

はじめに

残念なことに JavaScript には列挙型がありません。

しかし TypeScript は C# や Java といった言語と同様に列挙型を使用することができます。

今回は、TypeScript における列挙型について説明します。

スポンサーリンク

目次

スポンサーリンク

列挙型とは

列挙型を使用すると、名前付きの定数のセットを宣言することができます。

例えば元号を表す定数として、Meiji, Taisho, Syouwa, Heisei, Reiwa のような文字列をまとめた定数のセットを作ることができます。

TypeScript では以下3つの種類の列挙型を定義することができます。

  1. Numeric Enum
  2. String Enum
  3. Heterogeneous Enum
スポンサーリンク

列挙型の定義方法

Numeric Enum

Numeric Enum とは数値ベースの列挙型です。文字列の定数を列挙型として定義すると、自動的に0からの数値が割り当てられます。

Numeric Enumの定義書式を以下に示します。

enum 列挙型名 {
  定数名1,
  定数名2,
  :
  定数名n
}

元号、Meiji, Taisho, Syouwa, Heisei, Reiwaを Numeric Enum として定義する例を以下に示します。以下のように定義した場合は、Meiji=0, Taisho=1, Shouwa=2,Heisei=3,Reiwa=4 のように自動的に値が設定されます。

enum Gengo {
    Meiji,
    Taisho,
    Shouwa,
    Heisei,
    Reiwa
}

最初に振られる値を自分で設定するには以下のようにします。以下はMeiji = 1としており、以降は 2, 3, 4, 5 と自動的に振られます。

enum Gengo {
    Meiji = 1,
    Taisho,
    Shouwa,
    Heisei,
    Reiwa
}

定数に振る値は連続した値でなくても構いません。以下のように各定数にバラバラに値を振ることもできます。

enum Gengo {
    Meiji = 1,
    Taisho = 2,
    Shouwa = 4,
    Heisei = 8,
    Reiwa = 16
}

JavaScript は enum を持っていないため、トランスパイルすると以下のように変換されます。

// トランスパイルされた JavaScript のコード
var Gengo;
(function (Gengo) {
    Gengo[Gengo["Meiji"] = 1] = "Meiji";
    Gengo[Gengo["Taisho"] = 2] = "Taisho";
    Gengo[Gengo["Shouwa"] = 4] = "Shouwa";
    Gengo[Gengo["Heisei"] = 8] = "Heisei";
    Gengo[Gengo["Reiwa"] = 16] = "Reiwa";
})(Gengo || (Gengo = {}));

上記の他に、関数の戻り値を定数の値に設定したり、計算値を定数の値に設定することもできます。以下は定数 Shouwa の値に関数 getGengoValue の戻り値を設定しています。また、定数 Reiwa は定数 Shouwa の値に2を加算したものを設定しています。

enum Gengo {
    Meiji = 0,
    Taisho = 1,
    Shouwa = 2,
    Heisei = getGengoValue("Heisei"),
    Reiwa = Shouwa + 2
}

function getGengoValue(gengo : String) : number {
    let val = 0;
    switch(gengo) {
        case "Meiji":
            val = 0;
            break;
        case "Taisho":
            val = 1;
            break;
        case "Shouwa":
            val = 2;
            break;
        case "Heisei":
            val = 3;
            break;
        case "Reiwa":
            val = 4;
            break;
    }

    return val;
}

String Enum

Numeric Enum は数値を定数の値として設定しましたが、String Enum は文字列を定数の値として設定します。

以下に例を示します。

enum Gengo {
    Meiji = "明治",
    Taisho = "大正",
    Shouwa = "昭和",
    Heisei = "平成",
    Reiwa = "昭和"
}

Heterogeneous Enum

定数に設定する値は、数値と文字列を混在させることも可能です。

以下に例を示します。この例では Meiji と Taisho に数値を設定し、Shouwa, Heisei, Reiwa に文字列を設定しています。

enum Gengo {
    Meiji = 1,
    Taisho = 2,
    Shouwa = "昭和",
    Heisei = "平成",
    Reiwa = "昭和"
}
スポンサーリンク

列挙型の使用方法

定義した列挙型は「列挙型名.定数」という書式で使用することができます。

例えば、列挙型 Gengo の Heisei の値をコンソールログに出力したい場合は以下のようにします。

enum Gengo {
    Meiji = 1,
    Taisho = 2,
    Shouwa = 3,
    Heisei = 4,
    Reiwa = 5
}

console.log(Gengo.Heisei);

列挙型の値は逆マッピングすることができます。逆マッピングはメンバー値とその値からメンバにアクセスすることを指します。

以下に例を示します。

enum Gengo {
    Meiji = 1,
    Taisho = 2,
    Shouwa = 3,
    Heisei = 4,
    Reiwa = 5
}

console.log(Gengo.Shouwa);    // 3 を出力 
console.log(Gengo[3])         // Shouwa を出力
Please follow and like us:

コメント

タイトルとURLをコピーしました