【れっきょがた】

列挙型(Enum) とは?

最終更新:
💡 候補の値に、意味の分かる名前を付ける型

曜日や方向などの候補に名前を付けて扱う型。TypeScriptではenumで数値や文字列の定数をまとめられる。具体的な機能や型の制約は言語によって異なる。

📌 このページのポイント
数値に名前を付けて、意味を読めるようにする enum Color { Red = 0, Green = 1, Blue = 2 } 値だけだと意味を追う color === 0 名前で意味が読める color === Color.Red どちらも、この例では「赤」を比べている
TypeScriptの数値enumの例。Red=0、Green=1、Blue=2。外部データの候補チェックは別に必要。
ひよこ ひよこ
文字列の変数とどう違うの?
ペンギン先生 ペンギン先生
TypeScriptならenum Status { Active = 'active', Inactive = 'inactive' }と候補を定義できるよ。Status型の変数へStatus.Activeを入れて扱い、Status.Acitveのような存在しない名前は型検査で見つけられるんだ。
ひよこ ひよこ
JavaScriptでも使える?
ペンギン先生 ペンギン先生
JavaScript自体にはTypeScriptのenum構文はないよ。TypeScriptの通常のenumはJavaScriptのオブジェクトとして出力される。TypeScriptでは、オブジェクトにas constを付けて候補の値から型を作る方法もあるんだ。
ひよこ ひよこ
数値と文字列、どっちを選ぶの?
ペンギン先生 ペンギン先生
数値enumの値を全部省略すると0、1、2と増えるよ。文字列enumなら'active'のように値を明示でき、ログや受け渡しで意味を読み取りやすい。どちらを選ぶかは、既存のデータ形式や用途に合わせるんだ。
ひよこ ひよこ
const enumは必ず速いの?
ペンギン先生 ペンギン先生
通常は参照箇所に値を埋め込むけど、preserveConstEnumsなどの設定で出力は変わるよ。ほかのプロジェクトに公開する場合はisolatedModulesとの制約や版の不一致による問題もある。名前だけで性能が必ず良くなるとは言えないんだ。
ひよこ ひよこ
候補を決めれば、不正な入力も防げる?
ペンギン先生 ペンギン先生
型検査は実行時の外部データを自動で検証しないよ。APIや保存済みデータは候補に合うか確認する必要がある。保存する数値を自動採番に頼ると並べ替えで意味が変わり得るので、値の互換性も考えて変更するんだね。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「列挙型(Enum)」って出てきたら「候補の値に名前を付けて扱う型」と思えばだいたいOK!
📖 おまけ:英語の意味
「Enumeration / Enum」 = 列挙/列挙型
💬 値を名前付きで列挙する仕組みだよ。どんな値や機能を持てるかは、言語のenumの規則によって違うんだ。

参考資料

← 用語集にもどる