IT-Q

参画先で、TypeScript をビルドせず Node.js で直接(型を取り除いて)動かす方針になりました。enum が多用されています。どうしますか。

enum は実行時のオブジェクトを生成するので、型を取り除くだけの方式では扱えません。5.8 の erasableSyntaxOnly で洗い出し、as const のオブジェクトかユニオン型に置き換えます。

面接官が見ているのは🔴 enum が消せない構文であることと、5.8 の erasableSyntaxOnly を知っているか。

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

  • enum は実行時のコードを生むので型を取り除くだけでは動かない。erasableSyntaxOnly で洗い出し、as const のオブジェクトやリテラル型のユニオンに置き換える
    その通りです。5.8 の erasableSyntaxOnly が、こうした構文をエラーとして教えてくれます。
  • enum は型なので、取り除けばそのまま動く
    enum は実行時のオブジェクトを生成します。取り除くと、それを参照するコードが壊れます。
  • const enum にすれば実行時のコードが消えるので解決する
    const enum も、使う側を書き換える処理が要るので、型を取り除くだけの実行では扱えません。
  • 方針をやめて、これまでどおりビルドする
    判断としてはありえますが、enum を置き換えれば方針どおりにできます。理由を持って選びます。

模範解答

enum は、型の注釈と違って実行時のオブジェクトを生成します。型を取り除くだけで動かす方式(Node.js の型除去など)では、取り除けない構文として扱えません。

まず tsconfig に erasableSyntaxOnly(TypeScript 5.8 で追加)を有効にして、こうした構文をエラーとして洗い出します。対象は enum、実行時のコードを含む namespace、コンストラクタ引数のプロパティ宣言、import = などです。

enum は、as const を付けたオブジェクトか、文字列リテラルのユニオンに置き換えます。値の一覧が実行時にも要るなら as const のオブジェクト、型として使うだけならユニオンで足ります。

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

ここからどう深掘りされるか

この問いに答えられた場合、面談は次の質問に進みます。