Expected N arguments, but got M の原因と直し方
関数に定義されているパラメータの数と違う数の引数を渡して呼び出したときに出るエラーです。JavaScriptでは引数が多すぎても少なすぎても実行できてしまいますが、TypeScriptは呼び出し時点で検出します。
エラーメッセージの読み方
main.ts(4,23): error TS2554: Expected 2 arguments, but got 3.
main.ts- ファイル名
4- 行番号
23- 列番号 — この位置でtscが検査に失敗しました
TS2554- エラーコード — 検索するとTypeScriptの解説が見つかります
Expected 2 arguments, but got 3.- 内容 — 期待していたもの、または受け付けられなかったもの
このエラーが出る典型パターン
パターン1
1 function add(a: number, b: number): number { 2 return a + b; 3 } 4 console.log(add(1, 2, 3)); ^
main.ts(4,23): error TS2554: Expected 2 arguments, but got 3.
addは2つの引数しか受け取りません。3つ渡すと引数の数が合わずエラーになります。
直し方: add(1, 2, 3) を add(1, 2) にします。
広告
広告スロット(未設定)
パターン2
1 function greet(name: string, greeting: string): string { 2 return greeting + ", " + name; 3 } 4 console.log(greet("Al") ); ^
main.ts(4,13): error TS2554: Expected 2 arguments, but got 1.
greetは2つの引数が必須です。1つしか渡していないため呼び出せません。
直し方: greet("Al") を greet("Al", "Hello") にします。
パターン3
1 function makePoint(x: number, y: number): string { 2 return `(${x}, ${y})`; 3 } 4 console.log(makePoint(1, 2, 3)); ^
main.ts(4,29): error TS2554: Expected 2 arguments, but got 3.
makePointは2引数の関数です。余分な3つ目の引数を渡すとエラーになります。
直し方: makePoint(1, 2, 3) を makePoint(1, 2) にします。
よくある誤解
「JavaScriptは引数の数が合わなくても動く」という経験があると、TypeScriptでも同じだと思いがちです。型定義がある関数呼び出しでは、引数の数もチェック対象になります。
まとめ
Expected N arguments, but got Mは初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。