Code Fix

初級

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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

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