Open
Description
🔎 Search Terms
Debug Failure. No error for last overload signature
possibly related to
- "No error for last overload signature" regression in #58859 #60202
- Conditional type triggers "No error for last overload signature" exception #55217
🕗 Version & Regression Information
- This is the behavior in every version I tried, from 4.5.5 on through 5.7.0-dev.20241014. In 4.4 there's a different error,
RangeError: Maximum call stack size exceeded
.
⏯ Playground Link
💻 Code
// First copy of a library
type ComponentDefinitionExports<T> =
T extends ComponentDefinition<infer Exports> ? Exports : never;
class InstalledComponent<Definition extends ComponentDefinition<any>> {
get exports(): ComponentDefinitionExports<Definition> {
return null as any;
}
}
type ComponentDefinition<_Exports> = {
use<Definition extends ComponentDefinition<any>>(
definition: Definition
): InstalledComponent<Definition>;
};
function defineComponent(): ComponentDefinition<any> {
return null as any as ComponentDefinition<any>;
}
const aggregate = defineComponent();
// Imagine another copy of the library
type ComponentDefinitionExports2<T> =
T extends ComponentDefinition2<infer Exports> ? Exports : never;
class InstalledComponent2<Definition extends ComponentDefinition2<any>> {
get exports(): ComponentDefinitionExports2<Definition> {
return null as any;
}
}
type ComponentDefinition2<_Exports> = {
use<Definition extends ComponentDefinition2<any>>(
definition: Definition
): InstalledComponent2<Definition>;
};
export type AppDefinition2 = {
use<Definition extends ComponentDefinition2<any>>(
definition: Definition
): InstalledComponent2<Definition>;
};
export function defineApp2(): AppDefinition2 {
return null as any;
}
const app = defineApp2();
app.use(aggregate);
🙁 Actual behavior
tsc exits with error code 1 and write to stderr Debug Failure. No error for last overload signature
/Users/tomb/aggregate/node_modules/typescript/lib/tsc.js:113984
throw e;
^
Error: Debug Failure. No error for last overload signature
at resolveCall (/Users/tomb/aggregate/node_modules/typescript/lib/tsc.js:69834:19)
at resolveCallExpression (/Users/tomb/aggregate/node_modules/typescript/lib/tsc.js:70216:12)
at resolveSignature (/Users/tomb/aggregate/node_modules/typescript/lib/tsc.js:70599:16)
at getResolvedSignature (/Users/tomb/aggregate/node_modules/typescript/lib/tsc.js:70619:20)
at checkCallExpression (/Users/tomb/aggregate/node_modules/typescript/lib/tsc.js:70728:23)
at checkExpressionWorker (/Users/tomb/aggregate/node_modules/typescript/lib/tsc.js:73819:16)
at checkExpression (/Users/tomb/aggregate/node_modules/typescript/lib/tsc.js:73729:32)
at checkExpressionStatement (/Users/tomb/aggregate/node_modules/typescript/lib/tsc.js:76310:5)
at checkSourceElementWorker (/Users/tomb/aggregate/node_modules/typescript/lib/tsc.js:79237:16)
at checkSourceElement (/Users/tomb/aggregate/node_modules/typescript/lib/tsc.js:79097:7)
In the playground,
Uncaught (in promise) Error: Debug Failure. No error for last overload signature
at wR (tsWorker.js:341:318135)
...
🙂 Expected behavior
I'm not sure. I'd like this to pass typechecking.
Additional information about the issue
I tried to minimize this but I imagine this is not the minimal repro. Please give this a better title :)