本文へスキップ
BecomeCoder

TypeScriptコース · 第4章 型を組み合わせる · レッスン14

enum と as const

ブラウザで完結

導入

曜日や状態を 0, 1, 2 のような数値(マジックナンバー)で管理していると、「2 って何だっけ」とすぐ迷子になります。enum(列挙型)を使うと、意味のある名前で管理できます。また as const を使うと、配列オブジェクトを「書き換えられないリテラル値」として扱えます。

説明

enum はひとまとまりの名前付きの値を定義します。値を省略すると 0 から順に自動で数値が振られます。

enum Weekday {
  Sunday,
  Monday,
  Tuesday,
  Wednesday,
  Thursday,
  Friday,
  Saturday,
}
console.log(Weekday.Monday);   // 1
console.log(Weekday[1]);       // "Monday"

文字列を値にした文字列 enumもよく使われます(デバッグ時に値を見て意味がわかりやすいです)。

enum Status {
  Ok = "OK",
  Error = "ERROR",
}
console.log(Status.Ok);

第3章で学んだタプル([string, number])を、変更不可のリテラル型として固定したいときは as const を使います。

const point = [10, 20] as const;   // readonly [10, 20] という厳密な型になる
console.log(point[0], point[1]);
// point[0] = 5;   // エラー: as const で readonly になっているので書き換え不可

やってみよう

Weekday に存在する値をいくつか console.log(Weekday[番号]) で表示して、数値から名前が引けることを確かめましょう。

演習

enum Level { Low, Middle, High } を作り、console.log(Level.Middle) でその値を表示してください(Low0 から始まります)。

ヒント1を見る

enum Level { Low, Middle, High }Low = 0, Middle = 1, High = 2 になります。

ヒント2を見る

console.log(Level.Middle); と書きます。

実際に動かしてみよう

下のエディタにTypeScriptを書いて「実行」を押すと、その場でJavaScriptに変換してブラウザ内で実行し、出力が表示されます。本文の例をそのまま試したり、型注釈を書き換えたりしてみましょう(console.log の結果が下に出ます。初回だけコンパイラの読み込みに少し時間がかかります)。

TypeScript — ブラウザ内で実行

TypeScriptコンパイラ(同梱)でTS→JSに変換してから実行する学習用環境を読み込みます(初回のみコンパイラの読み込みに少し時間がかかります)。
スクロールして表示された時点でも自動で読み込まれます。