参画先で、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
お使いの版で挙動が違う場合があります。誤りに気づいたらこの解説を報告するから教えてください。
ここからどう深掘りされるか
この問いに答えられた場合、面談は次の質問に進みます。