**TypeScript Version:** 3.5.1 **Code** ```ts type Ctor = new () => Date; // ERROR, WTF? type Z1<T> = T extends () => Ctor ? InstanceType<ReturnType<T>> : never; // But here NO ERROR type Z2<T extends any> = T extends () => Ctor ? InstanceType<ReturnType<T>> : never; // ERROR type Z3<T> = T extends () => any ? InstanceType<ReturnType<T>> : never; // NO ERROR again type Z4<T extends () => 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:** ](https://www.typescriptlang.org/play/index.html#src=type%20Ctor%20%3D%20new%20()%20%3D%3E%20Date%3B%0D%0A%0D%0A%20%2F%2F%20ERROR%2C%20WTF%3F%0D%0Atype%20Z1%3CT%3E%20%3D%20T%20extends%20()%20%3D%3E%20Ctor%20%3F%20InstanceType%3CReturnType%3CT%3E%3E%20%3A%20never%3B%20%0D%0A%0D%0A%2F%2F%20NO%20ERROR%0D%0Atype%20Z2%3CT%20extends%20any%3E%20%3D%20T%20extends%20()%20%3D%3E%20Ctor%20%3F%20InstanceType%3CReturnType%3CT%3E%3E%20%3A%20never%3B%0D%0A%0D%0A%0D%0A%20%2F%2F%20ERROR%0D%0Atype%20Z4%3CT%3E%20%3D%20T%20extends%20()%20%3D%3E%20any%20%3F%20InstanceType%3CReturnType%3CT%3E%3E%20%3A%20never%3B%0D%0A%0D%0A%2F%2F%20NO%20ERROR%0D%0Atype%20Z3%3CT%20extends%20()%20%3D%3E%20any%3E%20%3D%20InstanceType%3CReturnType%3CT%3E%3E%3B%0D%0A%0D%0A)