Skip to content

Debug Failure. No error for last overload signature #60229

Open
@thomasballinger

Description

@thomasballinger

🔎 Search Terms

Debug Failure. No error for last overload signature

possibly related to

🕗 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

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 :)

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScript

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions