TypeScript で「Parameter implicitly has an 'any' type」(TS7006) が解決できない
noImplicitAny が有効で、引数に型注釈が無く型推論もできないためです。
引数へ明示的に型を付けるのが基本で、コールバックは文脈から型が付くよう書きます。
公開: 更新:
要約
Parameter 'x' implicitly has an 'any' type.(TS7006)は、noImplicitAny(strict 配下)が有効なときに、引数の型が注釈も推論もできず暗黙の any になっていることを示します。
原則は引数へ明示的な型を付けることで、コールバックは推論が効く書き方に直すと解消します。
よくある原因
- noImplicitAny 有効:
strict: trueを入れるとnoImplicitAnyも有効になり、注釈の無い引数がエラーになる。 - 独立した関数宣言:
function f(x) {}のように単独で定義した関数は呼び出し側から型が伝播しない。 - 型のない JS 連携:
@typesの無いライブラリのコールバック引数は推論材料が無く any になる。
解決策
1. 引数に型注釈を付ける
最も素直な解決策です。
function greet(name: string): string {
return `Hello, ${name}`;
}利用できる型注釈は公式ハンドブック(新しいタブで開く)にまとまっています。
2. 文脈的型付けを効かせる
コールバックは「型の付いた関数の引数」として渡せば推論されます。
const nums = [1, 2, 3];
nums.map((n) => n * 2); // n は number と推論されるmap の型から n: number が文脈的に決まるため、注釈は不要になります。
3. 設定で段階移行する(暫定)
大量の既存コードを一度に直せない場合のみ、tsconfig.json で一時的に緩めます。
{
"compilerOptions": {
"noImplicitAny": false
}
}ただし型安全性が下がるため恒久策にはせず、noImplicitAny の意味は公式の tsconfig リファレンス(新しいタブで開く)を確認しつつ段階的に型を付けて戻してください。
実行例
実際に上記の手順を node:20 環境で動かすと、型注釈のない引数 name に対して error TS7006: Parameter 'name' implicitly has an 'any' type.(終了コード 2)が発生し、解消策 1・2 のいずれを適用しても終了コード 0 で正常にコンパイルが完了することが確認できます。
v20.20.2
Version 5.9.3$ npx tsc
src/bad.ts(1,16): error TS7006: Parameter 'name' implicitly has an 'any' type.
tsc 終了コード: 2$ npx tsc
tsc 終了コード: 0$ npx tsc
tsc 終了コード: 0— 2026-08-02 時点の出力
検証環境
- 検証日
- 実行環境
node:20
この記事の「実行例」は、上記の環境で実際にコマンドを実行して得られた出力をそのまま掲載しています。 再現手順はリポジトリの検証スクリプトとして管理し、定期的に再実行して出力を更新しています。