TypeScript 7.0の新機能まとめ:erasableSyntaxOnly・noCheck・ignoreConfigの使い方
npm install -D typescript@7 npx tsc --version # Version 7.0.2
TypeScript 7.0 では --erasableSyntaxOnly・--noCheck・--ignoreConfig の3つの新しいコンパイラオプションが追加されました。特に --erasableSyntaxOnly は enum や namespace の扱いに影響する重要な変更です。
バージョン確認
npx tsc --version # Version 7.0.2
npm のタグは以下の通りです。
npm info typescript dist-tags # rc: 7.0.1-rc # latest: 7.0.2 # next: 7.1.0-dev.xxxxxxxx
--erasableSyntaxOnly
TypeScript 7.0 の最も重要な変更点です。
背景
Node.js 23.6 以降では TypeScript をそのまま実行できますが、内部では「型注釈だけを消去(erase)」する方式を採用しています。この方式では enum や namespace のように、消去するだけでは済まない構文(コンパイル後に JavaScript コードが生成される構文)は実行できません。
--erasableSyntaxOnly を有効にすると、こうした「消去できない構文」を使った時点でエラーにできます。
対象となる構文
// NG: enum は erasableSyntaxOnly でエラー enum Direction { Up, Down, } // NG: const enum も同様 const enum Status { Active, Inactive, } // NG: namespace もエラー namespace Utils { export function greet() {} }
npx tsc sample.ts --noEmit --ignoreConfig --erasableSyntaxOnly # error TS1294: This syntax is not allowed when 'erasableSyntaxOnly' is enabled.
代替手段
enum は as const オブジェクトで代替できます。
// OK: as const で enum を代替 const Direction = { Up: "Up", Down: "Down", } as const; type Direction = (typeof Direction)[keyof typeof Direction]; // OK: const enum の代替(Union型) type Status = "Active" | "Inactive"; // OK: namespace の代替(モジュール) // 別ファイルに export するだけで同等の機能が得られる
tsconfig.json に設定する
{ "compilerOptions": { "erasableSyntaxOnly": true } }
--noCheck
型チェックをスキップして JavaScript への変換のみ実行するオプションです。
# 型エラーがあってもコンパイルを通す npx tsc --noCheck
// 型エラーがあっても --noCheck では通過する const x: number = "型エラーだが通過";
型チェックは別途 tsc --noEmit で行い、ビルドは --noCheck で高速化するという使い分けができます。
# CI での使い分け例 tsc --noEmit # 型チェックのみ(時間がかかる) tsc --noCheck # JS変換のみ(高速)
--ignoreConfig
tsconfig.json が存在するプロジェクトで個別ファイルを CLI 引数に指定する場合に必要になったオプションです。
TypeScript 6 までの動作
# TypeScript 6 まではこれが通っていた tsc sample.ts --noEmit
TypeScript 7 からの動作
# TypeScript 7 では TS5112 エラーになる tsc sample.ts --noEmit # error TS5112: tsconfig.json is present but will not be loaded if files are specified # on commandline. Use '--ignoreConfig' to skip this error. # --ignoreConfig を付けると明示的に tsconfig を無視して実行できる tsc sample.ts --noEmit --ignoreConfig
tsconfig.json を使う通常のビルドには影響しません。個別ファイルを CLI で指定するスクリプトや Makefile を使っている場合に対応が必要です。
まとめ
| オプション | 用途 | 主なユースケース |
|---|---|---|
--erasableSyntaxOnly |
enum・namespace を禁止 | Node.jsネイティブ実行・型ストリッピングツールとの互換 |
--noCheck |
型チェックをスキップ | ビルドの高速化(型チェックは別コマンドで実施) |
--ignoreConfig |
tsconfig.json を明示的に無視 | CLI で個別ファイルを指定するスクリプト |
TypeScript のバージョン確認コマンドについては「TypeScriptのバージョン確認方法:tsc・npm・package.jsonで調べる」も参照してください。