Skip to content

Instantiation expressions should filter overloads by type parameter constraintsΒ #63126

@AFatNiBBa

Description

@AFatNiBBa

πŸ”Ž Search Terms

call signature constructor signature type parameter

πŸ•— Version & Regression Information

Tested in v4.7.4, v5.9.3 and Nightly (v6.0.0-dev.20260204)
Syntax error before v4.7.4

⏯ Playground Link

https://www.typescriptlang.org/play/?ts=5.9.3#code/LAKAJgpgxgNghgJwgAigewHYGcAuyBmAXMgN6jIXIA8AKgHwAUAHsTQJSsDc5lGEA7rWQQmOCBjBZkaAEYAraDkYtk7LqAC+3EKHTY8cZAF4CVEshnEAjMg11tAegeVkAPQD8oXZlwXjpq3tQJxcPYOcaAE8ABxQAcgwAVwBbGQgEOOQwNAgpDDQ8LDgcAEssfEjkHAALFD1cBDgSjDw42QUoHDigA

πŸ’» Code

declare const f: {
    <T>(x: T): T;
    new<T extends object>(x: T): T;
};

const a = f<{ b: 1 }>;
//    ^? const a: { (x: { b: 1; }): { b: 1; }; new (x: { b: 1; }): { b: 1; }; }

const b = f<1>;
//    ^? const b: { (x: 1): 1; new <T extends object>(x: T): T; }
// Type 'number' does not satisfy the constraint 'object'

πŸ™ Actual behavior

The type argument I pass to the object must met the requirements of both signatures

πŸ™‚ Expected behavior

The incompatible signature should just be filtered out, leaving only the compatible one

const b = f<1>;
//    ^? const b: (x: number) => number

Additional information about the issue

No response

Metadata

Metadata

Assignees

Labels

Needs InvestigationThis issue needs a team member to investigate its status.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions