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のように明示します。
直し方: n を n: 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と明示します。
直し方: name を name: 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にも型注釈が必要です。片方だけ型を書いても、残りは自動的には推論されません。
直し方: start を start: number にします。
よくある誤解
「型を書かなければJavaScriptと同じように動くはず」という考えは、strictモードのTypeScriptには通用しません。型注釈の省略が許されるのは、tscが文脈から型を推論できる場合だけです。
まとめ
implicitly has an 'any' typeは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。