Repository navigation
TS 3.9 - No overload matches this call #38241
Description
Activity
It is a breaking changed covered in #37195.
async?being optional is causing your problem. It was unsound code before that is now being caught.petebacondarwin commented
on Apr 29, 2020 ContributorMore actionsThis convoluted typing was created because we could not work out a better way to support a function that if invoked with
async: truewould return aPromiseorvoidotherwise.Kitson Kelly (@kitsonk) - do you have a suggestion for how we can support this scenario?
I think we just need to define one extra overload (although I would expect TS to be able to infer that on its own 😞):
export function mainNgcc(options: AsyncNgccOptions): Promise<void>; export function mainNgcc(options: SyncNgccOptions): void; +export function mainNgcc(options: AsyncNgccOptions | SyncNgccOptions): void | Promise<void>; export function mainNgcc(options: AsyncNgccOptions | SyncNgccOptions): void | Promise<void> { // ... }Reacted by spiffytechDanielRosenwasser commented
on Apr 29, 2020 MemberMore actionsI'm tempted to mark
Working as Intendedbut I'm not totally clear exactly whyOmit<..., "async"> & { async: true }causes issues. Anders Hejlsberg (@ahejlsberg) care to weigh in?Daniel Rosenwasser (@DanielRosenwasser) not to step on Ander's toes, but I believe it is very intentional, because #37195 was specifically to fix unsafe situations with
Omitand intersection types brought up in #36604.DanielRosenwasser commented
on Apr 29, 2020 MemberMore actionsOh, I see - I wasn't looking at where the error was being issued. This makes sense.
George Kalpakas (@gkalpak) technically you could condense the whole thing down to
// Overload export function process<T extends AsyncNgccOptions | SyncNgccOptions>(options: T): T extends AsyncNgccOptions ? Promise<void> : void; // Implementation export function process(options: AsyncNgccOptions | SyncNgccOptions): void | Promise<void> { return mainNgcc(options); }
- addedWorking as IntendedThe behavior described is the intended behavior; this is not a bugThe behavior described is the intended behavior; this is not a bug
on Apr 29, 2020 alan-agius4 commented
on Apr 30, 2020 ContributorAuthorMore actionsThanks guys for your input.
Thx, Daniel Rosenwasser (@DanielRosenwasser)!
FWIW, I still find overloads more readable (and wish TypeScript would recognize the 3rd overload signature from the implementation):
function process(options: SyncNgccOptions): void; function process(options: AsyncNgccOptions): Promise<void>; function process(options: SyncNgccOptions | AsyncNgccOptions): void | Promise<void> { // ... }
Reacted by Samuel TLG- locked as resolved and limited conversation to collaborators
on Oct 21, 2025
TypeScript Version: 3.9.1-rc
Search Terms:
No overload matches this call
Code
Expected behavior:
No error as per TS 3.8
Actual behavior:
Error
No overload matches this call. Overload 1 of 2, '(options: AsyncNgccOptions): Promise', gave the following error. Argument of type 'SyncNgccOptions | AsyncNgccOptions' is not assignable to parameter of type 'AsyncNgccOptions'. Type 'SyncNgccOptions' is not assignable to type 'AsyncNgccOptions'. Type 'SyncNgccOptions' is not assignable to type '{ async: true; }'. Types of property 'async' are incompatible. Type 'false | undefined' is not assignable to type 'true'. Type 'undefined' is not assignable to type 'true'. Overload 2 of 2, '(options: SyncNgccOptions): void', gave the following error. Argument of type 'SyncNgccOptions | AsyncNgccOptions' is not assignable to parameter of type 'SyncNgccOptions'. Type 'AsyncNgccOptions' is not assignable to type 'SyncNgccOptions'. Types of property 'async' are incompatible. Type 'true' is not assignable to type 'false | undefined'.
Playground Link: https://www.typescriptlang.org/v2/en/play?ts=3.9.0-beta#code/KYDwDg9gTgLgBASwHY2FAZgQwMbDgZQE8lsA5Ac22wHkwYEIkBnOAbwCg4u4AjTJ4AAVMMABYAuOExhRk5ANyduMTFHLAYAURRRCgiMhjCxAfknTZSBUq79i2M3CwAbAYoC+7dqEiw4MQjA8AEEmewoqWnpGFgBeOGoAWwQYAB4iEgiaOgZmABo4AHI7EkKAPjgAMjY4EuxJGQBXPHdFb3BoeHRGkmikODAoCFwmJgAKCByYyVDwymy+pgBKSUEh5IFUgDcDABMyxR9Opx7sPoGhkfHJxckMsnmo3OXJHYRdw46-bt7ci+HgKMJlNmDMwplHiCWAAfAhzSJQlZwN67OCwtYQDbAbZ7CocbhwKAaRpQfqJTDILLAxZLDxedq+Lqnc7kynzanPMHwhbPJEYrE494HBnHH5nP6spBUm6cuEQhE0157T6Mk6-RhwSXSqFc+U8mJouUPBW8pXvQ38hCbFF49ieIA
Related Issues: