IT-Q

TypeScript の enum について、注意すべきことはどれですか。

enum は実行時のオブジェクトを生成するので、型を取り除くだけで動かす環境(Node.js の型除去など)では使えないことがあります。5.8 の erasableSyntaxOnly で検出できます。

面接官が見ているのは🔴 enum が「型だけ」ではなく実行時のコードを生むことを知っているか(5.8 の erasableSyntaxOnly)。

よくある答えと、面談でどう見られるか

  • enum は実行時のオブジェクトを生成する。型を消すだけの実行環境では使えないことがある
    その通りです。Node.js の型を取り除くだけの実行などでは扱えず、5.8 の erasableSyntaxOnly はこれを止めます。
  • enum は型なので、コンパイル後のコードには何も残らない
    残ります。enum は数少ない「実行時のコードを生む」構文です。
  • enum は TypeScript 7.0 で廃止された
    廃止されていません。ただし代わりにリテラル型のユニオンや as const のオブジェクトを使う書き方も広く使われています。
  • 数値の enum には範囲外の数値も代入できてしまう
    5.0 で、範囲外の数値リテラルを代入するとエラーになるよう検査が厳しくなりました。版を確かめる必要があります。

模範解答

enum は、型の注釈と違って実行時のオブジェクトを生成します。TypeScript の構文の多くは型を取り除けばそのまま JavaScript になりますが、enum、実行時のコードを含む namespace、コンストラクタ引数のプロパティ宣言などは、取り除くだけでは JavaScript になりません。

最近は、型を取り除くだけで TypeScript を実行する環境が増えました(Node.js の型除去など)。そうした環境では enum が使えないことがあります。TypeScript 5.8 の erasableSyntaxOnly を有効にすると、こうした構文をエラーにできます。

代わりに、文字列リテラルのユニオン("red" | "green")や、as const を付けたオブジェクトを使う書き方がよく選ばれます。

対象: TypeScript 5.x〜7.0 照合した一次資料: 公式ドキュメント 照合: 2026-10-25 最終更新: 2026-10-25
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。