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
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。