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.

Playground Link:
TypeScript Version: 3.5.1
Code
Actual behaviour
type Z1<T> = T extends () => Ctor ? InstanceType<ReturnType<T>> : never;errorsExpected behaviour
type Z1<T> = T extends () => Ctor ? InstanceType<ReturnType<T>> : never;should be validMore examples.

Playground Link: