# TypeScript: “No overload matches this call” (TS2769)

> TS2769: No overload matches this call. Overload 1 of 2 gave the following error. Read the last overload’s error, narrow union arguments, or pass a generic.

Canonical: https://app369.com/fix/typescript-no-overload-matches-this-call/
Last updated: 2026-11-08

The compiler reports No overload matches this call, then Overload 1 of 2, '(...)', gave the following error, and the same for each other overload. The function has several typed signatures (common in React, Node.js, Express, styled-components, the Date constructor and array methods such as concat), and your arguments fit none of them. TypeScript lists one error per overload, which makes the message long.

**Short answer**

Read the error under the overload you meant to call (if unsure, the one whose parameters look closest to your arguments); that inner message is the real problem. If an argument is a union (string or array, say), each overload accepts only one side, so narrow it first. If an argument might be undefined, handle that first; overloaded functions such as new Date() report it this way. If a library call that should work fails, check that its @types version matches the library version.

## **Why no signature fits, and the fix**

1. 01 ### **A union argument that each overload only half accepts**
  > “TypeScript can only resolve a function call to a single overload” [**TypeScript, More on functions: overloads**](https://www.typescriptlang.org/docs/handbook/2/functions.html) If one overload takes a string and another takes an array, a value that might be either matches neither. Narrow it so one call fits, or change the function to take the union.```
declare function len(x: string): number;
declare function len(x: any[]): number;

const input: string | string[] = getInput();
const n = typeof input === 'string' ? len(input) : len(input);
```
2. 02 ### **An argument that might be undefined, or an untyped empty array** new Date(value) with value: string | undefined fits none of the Date constructor overloads, and [].concat(items) on an untyped empty array (never[]) fails the same way. Handle the undefined case first, and give empty arrays a type.```
const created = value ? new Date(value) : null;

const all: number[] = [];
const merged = all.concat(items);
```
3. 03 ### **A library call with mismatched types** React, Node.js and Express calls fail this way when @types/react, @types/node or @types/express does not match the installed library, or when two copies of the types are installed. Align the versions and run npm ls @types/react to spot duplicates.```
npm ls @types/react @types/node
```
4. 04 ### **When you write overloads yourself**
  > “Always prefer parameters with union types instead of overloads when possible” [**TypeScript, More on functions: writing good overloads**](https://www.typescriptlang.org/docs/handbook/2/functions.html) Callers see only the overload signatures, never the implementation signature. If a union parameter would do, it is simpler than overloads and gives clearer errors.

Checked against the vendor’s docs on November 8, 2026: [TypeScript Handbook: More on functions (overloads)](https://www.typescriptlang.org/docs/handbook/2/functions.html).

## **Rather hand it over?**

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

- [from $450**App Fix Ticket**One reproducible bug in an existing mobile or web app, diagnosed and fixed.**See scope and start**](https://app369.com/fixed-price/flutter-firebase-bug-fix/)
- [from $450**AI-Built App Rescue**A Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.****No issues worth fixing, no charge.**** If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.**See scope and start**](https://app369.com/fixed-price/ai-app-rescue/)

Related: [**TypeScript “Argument of type is not assignable to parameter”**](https://app369.com/fix/typescript-argument-of-type-is-not-assignable-to-parameter/) · [**TypeScript “Type is not assignable to type”**](https://app369.com/fix/typescript-type-is-not-assignable-to-type/) · [**TypeScript “implicitly has an any type”**](https://app369.com/fix/typescript-implicitly-has-an-any-type/)

Questions

## **More on this error**

<details>

<summary>**Which overload error should I read? **+</summary>

The one for the signature you meant to call. If you are unsure, pick the overload whose parameters look closest to your arguments.

</details>

<details>

<summary>**Should I cast to any to get past it? **+</summary>

No. The overloads exist because the function behaves differently per argument type; a cast can pick behavior you did not intend. Fix the argument type instead.

</details>

<details>

<summary>**Can you fix it for me? **+</summary>

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.

</details>

A different error?

## **Describe it and get a written quote**

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.

[**Describe your problem **→](https://app369.com/contact/) [**All fixes**](https://app369.com/fix/)