Skip to content

Checked type of conditional type isn't matched for constraint in true clause unless the type parameter is constrained #31700

Description

@sirian

TypeScript Version: 3.5.1

Code

typeCtor=new()=>Date;// ERROR, WTF?typeZ1<T>=Textends()=>Ctor ? InstanceType<ReturnType<T>> : never;// But here NO ERRORtypeZ2<Textendsany>=Textends()=>Ctor ? InstanceType<ReturnType<T>> : never;// ERRORtypeZ3<T>=Textends()=>any ? InstanceType<ReturnType<T>> : never;// NO ERROR againtypeZ4<Textends()=>any>=InstanceType<ReturnType<T>>;

Actual behaviour
type Z1<T> = T extends () => Ctor ? InstanceType<ReturnType<T>> : never; errors

Expected behaviour
type Z1<T> = T extends () => Ctor ? InstanceType<ReturnType<T>> : never; should be valid

More examples.
image

Playground Link:

Metadata

Metadata

Labels

Working as IntendedThe behavior described is the intended behavior; this is not a bug

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions