TypeScriptで「TS2769: No overload matches this call.」というエラーが発生しやすい状況として、最も適切なものはどれか?
解説
正解と要点正解は「オーバーロードされた関数に、どのシグネチャにも合わない引数を渡したとき」です。TS2769は、関数に複数のオーバーロードシグネチャ(呼び出しパターンの定義)が存在し、渡された引数がそのいずれにも一致しない場合に発生します。なぜその答えなのかconstでの再代入 — これはTS2588(Cannot assign to variable because it is a constant)に該当し、オーバーロードとは無関係です。void型で値を返す — これはTS2322などの型不一致エラーになります。オーバーロード解決の問題ではありません。存在しないプロパティの参照 — これはTS2339(Property does not exist on type)が発生します。つまり、TS2769は複数の呼び出しパターンを持つ関数特有のエラーであり、他の選択肢はそれぞれ別のエラーコードに対応します。背景・仕組みTypeScriptの関数オーバーロードとは、同じ関数名に対して複数のシグネチャを定義し、引数の型や数に応じて異なる振る舞いを型レベルで表現する仕組みです。コンパイラは呼び出し時に上から順にシグネチャを照合し、最初に一致したものを採用します。どれにも一致しなければTS2769が発生します。function format(value: string): string; function format(value: number, decimals: number): string; function format(value: any, decimals?: number): string { if (typeof value === 'string') return value.trim(); return value.toFixed(decimals); } format(true); // TS2769: booleanに合うシグネチャがないDOMのAPIやライブラリの型定義でもオーバーロードは多用されており、たとえばaddEventListenerはイベント名ごとに異なるシグネチャを持ちます。実務での活用例TS2769に遭遇した際の対処法は以下のとおりです。エラーメッセージを最後まで読む — TypeScriptは各オーバーロードに対して「なぜ一致しなかったか」を個別に表示します。最も近いシグネチャのエラー詳細を手がかりにすると原因を特定しやすくなります。渡している引数の型を確認する — as constを付けてリテラル型を保持する、あるいは明示的に型注釈を加えることで解決するケースが多いです。React開発での頻出例 — useStateやイベントハンドラで型が曖昧な値を渡すとTS2769が出やすいため、ジェネリクスで型を明示する(useState<string>('')など)習慣が有効です。