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 オブジェクトに置き換えることが多くなっています。
Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%