引数の型が合わないエラーの原因と直し方
関数やメソッドの引数に、パラメータの型と違う型の値を渡したときに出るエラーです。配列のpush()のような組み込みメソッドの引数でも同じ形式のエラーになります。
エラーメッセージの読み方
main.ts(4,19): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'.
main.ts- ファイル名
4- 行番号
19- 列番号 — この位置でtscが検査に失敗しました
TS2345- エラーコード — 検索するとTypeScriptの解説が見つかります
Argument of type 'number' is not assignable to parameter of type 'string'.- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 function greet(name: string): string { 2 return "Hello, " + name; 3 } 4 console.log(greet(42 )); ^
main.ts(4,19): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'.
greetはstring型の引数を期待しています。数値の42はそのままでは渡せません。
直し方: 42 を "Al" にします。
広告
広告スロット(未設定)
パターン2
1 const nums: number[] = [1, 2, 3]; 2 nums.push("4"); ^ 3 console.log(nums);
main.ts(2,11): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
numsはnumber[]型なので、push()に渡せるのは数値だけです。文字列の"4"は追加できません。
直し方: "4" を 4 にします。
パターン3
1 function isEven(n: number): boolean { 2 return n % 2 === 0; 3 } 4 console.log(isEven("4")); ^
main.ts(4,20): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
isEvenはnumber型の引数を期待しています。文字列の"4"は数値と見た目が似ていても別の型です。
直し方: "4" を 4 にします。
よくある誤解
「配列に型を付けても、実際に入れる値までは見ていないはず」という思い込みは誤りです。numbers.push("4")のように、typed配列へ違う型の要素を追加しようとした時点でエラーになります。
まとめ
引数の型が合わないエラーの原因と直し方は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。