【TypeScript】TS 7 エラー逆引き — TS5108・TS5102 の直し方

TS 7 エラー逆引きを表したアイキャッチ画像

TypeScript 7.0 に上げたら target や baseUrl でビルドが止まった人向けの逆引きです。TS5108・TS5102・TS5101 の症状別に、tsc を実際に動かして確かめた原因と直し方を5ケースで整理しました。

目次

TS 7 に上げたらビルドが止まったときの直し方

  • TypeScript 7.0 にしたら「Option ‘target=ES5’ has been removed」でビルドが通らない
  • baseUrl を消せと言われるけど、paths の書き換え方が分からない
  • tsconfig に書いていないのに TS5107 系のエラーが出る

対象読者: TypeScript 6 系から 7 系へ移行中の人です。

前提知識: tsconfig.json の基本と、npm 経由で tsc を実行する方法です。

結論

TS 7.0 で廃止されたオプションは、警告を抑えるフラグでは消せません。設定自体を直す必要があります。

  • TS5108 / TS5102 が出たら、該当オプションを tsconfig から削除する
  • 6 系での一時しのぎなら ignoreDeprecations: “6.0”(7 系では無効)
  • 書いていないのに出る場合は、ビルドツールが既定値を注入している

ケース1: TS5108「target=ES5 has been removed」

target を es2015 以降に上げるしかありません。

再現に使った tsconfig と、実測のエラー出力です。

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "strict": true
  }
}
npx tsc -p case-a --noEmit
# 実行結果
case-a/tsconfig.json(3,15): error TS5108: Option 'target=ES5' has been removed. Please remove it from your configuration.

TS 6.0 では TS5107 の警告に留まりました。7.0 ではオプション自体が削除され、警告がエラーに変わっています。

ignoreDeprecations: “6.0” を足しても消えません。同じ TS5108 が出続けることを実測で確認しています。

直し方は target の差し替えだけです。

{
  "compilerOptions": {
    "target": "es2015",
    "module": "commonjs",
    "strict": true
  }
}
npx tsc -p case-a-fixed --noEmit && echo compile-ok
# 実行結果
compile-ok

古い実行環境を対象にする必要がある場合は、出力後に別のトランスパイラで下げるのが現実的です。

ケース2: TS5102「baseUrl has been removed」と TS5090

baseUrl を消して、paths の値を tsconfig からの相対パスに書き直します。

実測の出力です。baseUrl だけでなく、paths の値にも「./」が必須になっています。

{
  "compilerOptions": {
    "target": "es2020",
    "module": "commonjs",
    "baseUrl": ".",
    "paths": { "@app/*": ["src/*"] }
  }
}
npx tsc -p case-b --noEmit
# 実行結果
case-b/tsconfig.json(5,5): error TS5102: Option 'baseUrl' has been removed. Please remove it from your configuration.
  Use '"paths": {"*": ["./*"]}' instead.
case-b/tsconfig.json(6,27): error TS5090: Non-relative paths are not allowed. Did you forget a leading './'?

6 系では TS5101 の警告になり、移行情報へのリンクが付きます。

npx -p typescript@6 tsc -p case-b --noEmit
# 実行結果
case-b/tsconfig.json(5,5): error TS5101: Option 'baseUrl' is deprecated and will stop functioning in TypeScript 7.0. Specify compilerOption '"ignoreDeprecations": "6.0"' to silence this error.
  Visit https://aka.ms/ts6 for migration information.

直し方は baseUrl 行の削除と、paths の値への「./」付与です。

{
  "compilerOptions": {
    "target": "es2020",
    "module": "commonjs",
    "paths": { "@app/*": ["./src/*"] }
  }
}

@app/ 経由の import を実際に解決できることも確認済みです。

npx tsc -p case-b-fixed --noEmit && echo alias-resolution-ok
# 実行結果
alias-resolution-ok

baseUrl が廃止になった背景の深掘りは、TypeScript 6.0 移行ガイドに記載されています。

ケース3: module / moduleResolution の削除値

amd・umd・system と、moduleResolution の node・classic は TS 7 で使えません。

実測した対応関係を表にまとめました。

指定値 TS 7.0.2 の実測結果 直し方
module: “amd” / “umd” / “system” TS5108(removed) “esnext” か “preserve” へ
moduleResolution: “node” TS5108(node10 として報告) “bundler” か “nodenext” へ
moduleResolution: “classic” TS6046(選択肢に無い引数) “bundler” か “nodenext” へ
target: “es3” TS6046(選択肢に無い引数) “es2015” 以降へ

module amd の実測はこちらです。bundler 既定との組み合わせエラーも併せて出ます。

npx tsc -p case-c --noEmit
# 実行結果
case-c/tsconfig.json(1,3): error TS5095: Option 'bundler' can only be used when 'module' is set to 'preserve', 'commonjs', or 'es2015' or later.
case-c/tsconfig.json(1,54): error TS5108: Option 'module=AMD' has been removed. Please remove it from your configuration.

アプリやバンドラ利用なら module は esnext、ライブラリなら nodenext が無難です。

ケース4: esModuleInterop=false など「false を明示した」系

false に固定していた行は丸ごと削除します。

{
  "compilerOptions": {
    "target": "es2020",
    "module": "commonjs",
    "esModuleInterop": false
  }
}
npx tsc -p case-e --noEmit
# 実行結果
case-e/tsconfig.json(1,85): error TS5108: Option 'esModuleInterop=false' has been removed. Please remove it from your configuration.

7.0 で interop 系の挙動が既定で有効になったため、false の指定自体が削除対象になったんですね。

alwaysStrict=false、allowSyntheticDefaultImports=false も同じく TS5108 が出ます。直し方は行を消すだけです。

ケース5: tsconfig に無いのにエラーが出る

ビルドツール側が既定の compilerOptions を注入しています。

ts-loader 経由の Cypress では、15.14.0 より前が downlevelIteration や moduleResolution: classic を勝手に足していたことが issue #33385 で報告・修正されています。

Visual Studio の MSBuild でも、ツール側の TypeScript 7 化で同じ削除エラーが出る事例があります。

まず tsc 単体で再現するか切り分けてみてください。CLI からでも同じエラーが出ます。

npx tsc --target es5 --noEmit index.ts
# 実行結果
error TS5108: Option 'target=ES5' has been removed. Please remove it from your configuration.

原因がツール側なら、ツールを最新にするか、ツール側の TypeScript バージョンを固定するのが直し方です。

一時しのぎは ignoreDeprecations: “6.0” ですが、警告を消すだけで根本解決ではありません。

つまずきポイント

  • ignoreDeprecations: “6.0” は 6 系専用。7 系では TS5108 / TS5102 を消せない
  • 7 系で ignoreDeprecations を指定しても、非推奨の指定が無ければエラーを出さずに通る。無効化の目印にはならない
  • target es3 は TS5108 ではなく TS6046(選択肢に無い引数)で落ちる
  • –target es5 のような CLI フラグでも TS5108 になる。tsconfig だけの問題ではない

検証環境

OS Windows 11 (build 10.0.26200)
CPU AMD Ryzen 9 PRO 8945HS w/ Radeon 780M Graphics
メモリ 28GB
言語/ツール Node.js 24.16.0(ホストにインストール済み)/ TypeScript 7.0.2(npm 経由)/ TypeScript 6.0.3(npm 経由・比較用)
使用コマンド tsc -p case-a 〜 case-f –noEmit(削除エラーの再現)/ tsc -p case-a-fixed・case-b-fixed –noEmit(修正後のコンパイル確認)/ tsc –target es5 –noEmit index.ts(CLI フラグの再現)
測定日 2026-10-25

上記の環境で実際に実行して確認した結果です。環境が異なる場合は挙動が変わることがあります。

TypeScript 7.0.2 と 6.0.3 に同じ tsconfig を食わせた実測ログ。TS5108 / TS5102 の再現、TS5107 / TS5101 の 6 系警告、ignoreDeprecations が 7 系で効かないこと、baseUrl 削除後の paths 解決、module amd / moduleResolution node / esModuleInterop=false の各削除までを1枚にまとめたもの
TypeScript 7.0.2 と 6.0.3 に同じ tsconfig を食わせた実測ログ。TS5108 / TS5102 の再現、TS5107 / TS5101 の 6 系警告、ignoreDeprecations が 7 系で効かないこと、baseUrl 削除後の paths 解決、module amd / moduleResolution node / esModuleInterop=false の各削除までを1枚にまとめたもの

まとめ

公式の移行の目安はシンプルです。6 系で ignoreDeprecations なしにクリーンにコンパイルできること、と書かれています。

エラーコード 意味 直し方
TS5108 オプション(の値)が TS 7 で削除 該当行を削除する
TS5102 baseUrl・downlevelIteration が削除 baseUrl 削除・paths は相対パスに
TS5101 TS 6 で baseUrl 非推奨 同上(6 系の警告)
TS5107 TS 6 で値が非推奨 新しい値へ変更(6 系の警告)
TS5090 paths の値に ./ 必須 “./src/*” 形式に書き直す
TS6046 選択肢に無い値 エラーの一覧から新しい値を選ぶ

6 系で警告のまま見逃していた指定が、7 系ではまとめてエラーになります。早めに直しておくと楽ですよ。

【広告】お名前.comならドメイン取得が格安。

参考

あわせて読みたい

【広告】このサイトはConoHa WINGで運営しています。安定した高速サーバーで快適にブログを書けています。いつもありがとう!!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次