enum 列挙型
最終更新:2026-10-22
enum 列挙型
列挙型は関連する定数群を 1 つの名前空間の下にまとめ、メンバーは型でもあり値でもあります。数値列挙はデフォルトで 0 からインクリメント、文字列列挙は明示的に値を代入します。文字列列挙の方が可読性が高いです。
| グループ | 基本型 |
|---|---|
| 種類 | 型 |
| strict モード | 不要 |
ℹ️ 説明 エディタは TypeScript を JavaScript にトランスパイルして実行します(型チェックなし)。型チェック結果は各サンプルの出力を参照してください。
📝 構文
enum Direction { Up, Down } // 数値の列挙: 0, 1
enum Level { Info = "info", Error = "error" } // 文字列の列挙
⚙️ パラメータ
| Member = 0 | 数値メンバーはデフォルトで 0 からインクリメント、明示的な代入も可能です。文字列メンバーは必ず明示的に代入しなければなりません |
|---|---|
| Enum[key] | 数値列挙のみ Direction[0] による名前の逆引きに対応し、文字列列挙にはありません |
戻り値:列挙型は実際の実行時オブジェクトを生成します(純粋な型ではありません)。interface/type とは異なります。
▶ サンプル
下のコードを編集して「試す」を押すと、トランスパイル実行結果を確認できます:
出力:
1 Shipped
warn
(トランスパイル後の実行出力。Paid の番号は 1、OrderStatus[2] を逆引きすると Shipped になります)
💡 ポイント
ℹ️ 説明 数値列挙には逆マッピング(OrderStatus[1] → "Paid")があり、文字列列挙には逆マッピングがありません。
💡 ヒント 文字列列挙はデバッグやシリアライズ後も意味を保ちます(ログで "warn" が見え、1 ではありません)。対外的なインターフェースでは文字列列挙を優先しましょう。
⚠️ 注意 列挙型はリテラルユニオンと機能が重複します。多くのチーム規約は後者(実行時コードを生成しない)を推奨しています。新規プロジェクトではまずリテラルユニオンを使い、本当に必要になったら列挙型を使いましょう。
🏷️ 関連基本型
💡 関連ケース
ケースは今後追加予定です。
📚 関連チュートリアル
❓ よくある質問
Q enum とリテラルユニオン型はどう使い分けますか?
A どちらも取りうる値を限定できます。列挙型は実際のオブジェクトで、実行時ロジックに置けます。リテラルユニオンは実行時コストがゼロで、普通の文字列とシームレスに連携します。多くの場面ではリテラルユニオンがおすすめです。
Q 数値列挙のデフォルトの番号付けルールは何ですか?
A 0 からインクリメントます。あるメンバーに明示的に値を代入すると、その後のメンバーはその値を基準に +1 されます。例えば { A, B = 5, C } の番号は 0、5、6 です。
Q const enum とは何ですか?
A const enum はコンパイル時にメンバー参照を直接値へインライン化し、列挙オブジェクトを生成しません。ただし分離コンパイル(Babel/swc など)では互換性の問題があるため、モジュールをまたぐ使用には注意が必要です。現代のプロジェクトでは as const オブジェクトに置き換えることが多くなっています。