Skip to content

Incorrect intersection narrowing of nongeneric type in conditional type #43427

@RyanCavanaugh

Description

@RyanCavanaugh

Bug Report

🔎 Search Terms

conditional type narrow nongeneric

🕗 Version & Regression Information

  • This changed between versions 3.8 and 3.9

⏯ Playground Link

Playground link with relevant code

💻 Code

type Q<T> = number extends T ? (n: number) => void : never;
function fn<T>(arg: Q<T>) {
  // Expected: OK
  // Actual: Cannot convert 10 to number & T
  arg(10);
}
// Legal invocations are not problematic
fn<string | number>(m => m.toFixed());
fn<number>(m => m.toFixed());

🙁 Actual behavior

Error issued at arg(10), even though by inspection this is always a legal call.

🙂 Expected behavior

Honestly, not sure.

Metadata

Metadata

Assignees

Labels

BugA bug in TypeScript

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions