Code Fix

初級

引数の型が合わないエラーの原因と直し方

関数やメソッドの引数に、パラメータの型と違う型の値を渡したときに出るエラーです。配列の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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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