type Constructor<T> = new (...args: any[]) => T;
function f1<T extends {}>(naked: Constructor<T>): any {
return class dressed extends naked { } // error
}
function f2<T extends Constructor<{}>>(naked: T): any {
return class dressed extends naked { } // ok
}
f1 says 'dressed' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint '{}'.
i don't think there is any semantic fault in f1, but why there is a grammar fault?