TypeScript 速習チュートリアル

TypeScript の列挙型

列挙型(Enum)は、関連する定数(変更不可能な変数)のグループを表す特別な「クラス」のようなものです。

TypeScriptの列挙型には、数値(Numeric)文字列(String)の2つの種類があります。まずは数値列挙型から見ていきましょう。

1. 数値列挙型 - デフォルト設定 (Default)

デフォルトでは、列挙型は最初の値を 0 で初期化し、それ以降の値には順に 1 を加算していきます。

enum CardinalDirections {
  North, // 0
  East,  // 1
  South, // 2
  West   // 3
}

let currentDirection = CardinalDirections.North;

// 0 が出力されます
console.log(currentDirection);

// 'North' は有効な Enum ではないため、エラーになります
currentDirection = 'North'; // エラー: 型 '"North"' を型 'CardinalDirections' に割り当てることはできません。

2. 数値列挙型 - 初期値の指定 (Initialized)

数値列挙型の最初の値に任意の数値を設定することができます。その場合、それ以降の値はその数値から自動的にインクリメント(加算)されます。

enum CardinalDirections {
  North = 1,
  East,  // 2
  South, // 3
  West   // 4
}

// 1 が出力されます
console.log(CardinalDirections.North);

// 4 が出力されます
console.log(CardinalDirections.West);

3. 数値列挙型 - 全ての値を指定 (Fully Initialized)

すべての列挙型の値に対して、一意の数値を個別に割り当てることも可能です。この場合、値は自動的にインクリメントされません。

enum StatusCodes {
  NotFound = 404,
  Success = 200,
  Accepted = 202,
  BadRequest = 400
}

// 404 が出力されます
console.log(StatusCodes.NotFound);

// 200 が出力されます
console.log(StatusCodes.Success);

4. 文字列列挙型 (String Enums)

列挙型には文字列(Strings)を含めることもできます。
文字列列挙型は、その可読性(Readability)とコードの意図が明確になるという理由から、数値列挙型よりも一般的に使用されます。

enum CardinalDirections {
  North = 'North',
  East = "East",
  South = "South",
  West = "West"
};

// "North" が出力されます
console.log(CardinalDirections.North);

// "West" が出力されます
console.log(CardinalDirections.West);

数値列挙型とは異なり、文字列列挙型はコードを実行した際のログ出力が読みやすいため、デバッグ時や外部システムとの連携において非常に有用です。