TypeScript 7.0の新機能まとめ:erasableSyntaxOnly・noCheck・ignoreConfigの使い方

スポンサーリンク

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)」する方式を採用しています。この方式では enumnamespace のように、消去するだけでは済まない構文(コンパイル後に 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.

代替手段

enumas 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で調べる」も参照してください。