【れっきょがた】
列挙型(Enum) とは?
💡 選べる選択肢が決まった「自動販売機のボタン」
📌 このページのポイント
- TypeScriptでは enum キーワードで定義し、決まった値の集合を型として扱える
- 文字列以外の値がうっかり混入するのを防ぎ、コードの安全性が高まる
- 数値enum(デフォルト)と文字列enumがあり、文字列enumのほうがデバッグしやすい
- TypeScriptでは const enum を使うとコンパイル時に値が展開されてパフォーマンスが良い
普通の変数に文字列を入れるのとどう違うの?
status = "acitve" とタイプミスしても文字列なら気づかない。Enumなら Status.Active のように定義された選択肢しか使えないので、タイプミスはコンパイルエラーで即座にわかる。安全装置つきの選択肢リスト。
JavaScriptにはEnumがないの?
JavaScript自体にはEnum構文がない。代わりに const STATUS = Object.freeze({ ACTIVE: "active", INACTIVE: "inactive" }) のようにオブジェクトで代用する。TypeScriptなら enum キーワードが使える。
数値enumと文字列enumどっちがいい?
Enumに振る舞いを持たせることもできるの?
JavaやKotlinではEnumにメソッドやフィールドを追加できるよ。たとえばHTTPステータスコードのEnumに「isSuccess()」メソッドを追加して、200番台かどうかを判定させるとか。ただしTypeScriptのenumにはメソッドを追加できないから、classで代用する場合もあるんだ。
Enumの値が増えたらどう管理するの?
DBに保存している場合は要注意だよ。Enumの値を後から削除すると、古いデータとの不整合が起きる。だから「DEPRECATED_旧値」のように残しておく運用が安全。あと、switch文でEnumの全パターンをカバーしているか確認する「網羅性チェック」をコンパイラに任せると、値を追加したとき対応漏れを自動検知できるからおすすめだよ。
まとめ:ざっくりこれだけ覚えればOK!
Enumって出てきたら「選べる値をあらかじめ決めておく型」と思えばだいたいOK!
📖 おまけ:英語の意味
「enumeration」 = 列挙、一覧
💬 ラテン語の「enumerare(数え上げる)」が語源で、値を一つずつ列挙することから