TypeScriptの非対応バージョン警告の解決方法
問題の概要
TypeScriptプロジェクトでESLintを使用する際に、以下の警告が表示されることがあります:
=============
WARNING: You are currently running a version of TypeScript which is not
officially supported by @typescript-eslint/typescript-estree.
You may find that it works just fine, or you may not.
SUPPORTED TYPESCRIPT VERSIONS: >=3.3.1 <4.4.0
YOUR TYPESCRIPT VERSION: 4.4.2
Please only submit bug reports when using the officially supported
version.
=============
これは、使用しているTypeScriptのバージョンが @typescript-eslint/typescript-estree
パッケージの公式サポート範囲外であることを示しています。
注意
この警告は、パッケージ間のバージョン互換性の問題を示しています。無視しても動作する場合もありますが、予期しないESLintの挙動や解析エラーの原因となる可能性があります。
原因分析
この問題は、TypeScriptとESLint関連パッケージのバージョン不一致によって発生します。主な原因は:
- TypeScriptが新しいバージョンに更新されたが、ESLint関連パッケージが古いまま
- 間接的な依存関係で古いバージョンの
@typescript-eslint/typescript-estree
が使用されている - パッケージマネージャーのロックファイルによる古いバージョンの固定
解決方法
方法1: ESLint関連パッケージの更新(推奨)
最も安全で推奨される解決方法は、ESLintとTypeScript ESLintパッケージを最新バージョンに更新することです:
npm i eslint@latest @typescript-eslint/parser@latest @typescript-eslint/eslint-plugin@latest --save-dev
更新後、以下のような互換性のあるバージョン構成になります:
{
"eslint": "^8.38.0",
"@typescript-eslint/parser": "^5.59.2",
"@typescript-eslint/eslint-plugin": "^5.59.2",
"typescript": "^5.0.4"
}
バージョン対応表
主要な @typescript-eslint/typescript-estree
バージョンと対応するTypeScriptバージョン:
typescript-estree バージョン | TypeScript バージョン |
---|---|
8.26.0 | TS 5.8 |
8.10.0 | TS 5.6 |
7.14.0 | TS 5.5 |
7.2.0 | TS 5.4 |
6.13.0 | TS 5.3 |
6.5.0 | TS 5.2 |
5.61.0 | TS 5.1 |
5.55.0 | TS 5.0 |
方法2: 依存関係の衝突解決
複数のパッケージが異なるバージョンの @typescript-eslint/typescript-estree
を要求している場合、以下のコマンドで依存関係を調査できます:
npm why @typescript-eslint/typescript-estree
出力例:
@typescript-eslint/typescript-estree@4.33.0 dev
node_modules/@typescript-eslint/typescript-estree
@typescript-eslint/typescript-estree@"4.33.0" from @typescript-eslint/experimental-utils@4.33.0
node_modules/@typescript-eslint/experimental-utils
@typescript-eslint/experimental-utils@"^4.0.1" from eslint-plugin-jest@24.7.0
node_modules/eslint-plugin-jest
dev eslint-plugin-jest@"^24.3.6" from the root project
この例では、eslint-plugin-jest
が古いバージョンを要求しているため、このパッケージを更新する必要があります。
方法3: パッケージマネージャーによるバージョン強制
Yarnを使用している場合は resolutions
、npmの場合は overrides
を使用して特定のバージョンを強制できます:
{
"resolutions": {
"@typescript-eslint/typescript-estree": "^5.59.2"
}
}
{
"overrides": {
"@typescript-eslint/typescript-estree": "^5.59.2"
}
}
方法4: 警告の無効化(非推奨)
どうしても解決できない場合で、警告のみを抑制したい場合は、ESLint設定で警告を無効化できます:
// eslint.config.js または .eslintrc
module.exports = {
languageOptions: {
parserOptions: {
warnOnUnsupportedTypeScriptVersion: false,
},
},
};
注意
この方法は警告を表示しなくするだけであり、実際の互換性問題は解決しません。バグレポートを行う際や本番環境では推奨されません。
その他の関連パッケージの更新
Create React Appを使用している場合、eslint-config-next
などの関連パッケージも更新が必要な場合があります:
npm update eslint-config-next
予防策
- 定期的な依存関係の更新:
npm outdated
で古いパッケージを定期的にチェック - バージョン互換性の確認: パッケージを更新する前に公式ドキュメントで互換性を確認
- ロックファイルの管理:
package-lock.json
やyarn.lock
を定期的に更新
まとめ
TypeScriptとESLintのバージョン不一致警告は、以下の方法で解決できます:
- ESLint関連パッケージの一括更新(最も推奨)
- 依存関係の衝突解決
- パッケージマネージャーによるバージョン強制
- 警告の無効化(最終手段)
プロジェクトの状況に応じて適切な方法を選択し、TypeScriptの新機能を活用しながらもESLintの静的解析のメリットを享受できる環境を構築しましょう。