できない.dev

TypeScript で「Parameter implicitly has an 'any' type」(TS7006) が解決できない

noImplicitAny が有効で、引数に型注釈が無く型推論もできないためです。
引数へ明示的に型を付けるのが基本で、コールバックは文脈から型が付くよう書きます。

#typescript#noimplicitany#ts7006#any#types

要約

Parameter 'x' implicitly has an 'any' type.(TS7006)は、noImplicitAnystrict 配下)が有効なときに、引数の型が注釈も推論もできず暗黙の any になっていることを示します。
原則は引数へ明示的な型を付けることで、コールバックは推論が効く書き方に直すと解消します。

よくある原因

  1. noImplicitAny 有効: strict: true を入れると noImplicitAny も有効になり、注釈の無い引数がエラーになる。
  2. 独立した関数宣言: function f(x) {} のように単独で定義した関数は呼び出し側から型が伝播しない。
  3. 型のない 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 リファレンスを確認しつつ段階的に型を付けて戻してください。

この記事は役立ちましたか?