Code Fix

初級

implicitly has an 'any' type の原因と直し方

関数のパラメータに型注釈を付けないと、strictモードのTypeScriptは型を推論できず「暗黙のany」としてエラーにします。anyは型チェックを無効化してしまうため、TypeScriptの利点を守るために既定で禁止されています。

エラーメッセージの読み方

main.ts(1,17): error TS7006: Parameter 'n' implicitly has an 'any' type.
main.ts
ファイル名
1
行番号
17
列番号 — この位置でtscが検査に失敗しました
TS7006
エラーコード — 検索するとTypeScriptの解説が見つかります
Parameter 'n' implicitly has an 'any' type.
内容 — 期待していたもの、または受け付けられなかったもの

このエラーが出る典型パターン

パターン1

 1  function double(n        ) {
                        ^
 2    return n * 2;
 3  }
 4  console.log(double(5));
main.ts(1,17): error TS7006: Parameter 'n' implicitly has an 'any' type.

strictモードでは、パラメータの型が推論できない場合に型注釈が必須です。n: numberのように明示します。

直し方: nn: number にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  function greet(name        ) {
                         ^
 2    return "Hello, " + name;
 3  }
 4  console.log(greet("Al"));
main.ts(1,16): error TS7006: Parameter 'name' implicitly has an 'any' type.

nameパラメータに型注釈が無いため、anyとして扱われエラーになります。name: stringと明示します。

直し方: namename: string にします。

この問題を解いてみる →

パターン3

 1  function sum(items: number[], start        ) {
                                        ^
 2    return items.reduce((a, b) => a + b, start);
 3  }
 4  console.log(sum([1, 2, 3], 0));
main.ts(1,31): error TS7006: Parameter 'start' implicitly has an 'any' type.

2つ目のパラメータstartにも型注釈が必要です。片方だけ型を書いても、残りは自動的には推論されません。

直し方: startstart: number にします。

この問題を解いてみる →

よくある誤解

「型を書かなければJavaScriptと同じように動くはず」という考えは、strictモードのTypeScriptには通用しません。型注釈の省略が許されるのは、tscが文脈から型を推論できる場合だけです。

まとめ

implicitly has an 'any' typeは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)