TypeScript Version: 3.5.1+
Search Terms: generic class constructor inference
Code
class C<T> {}
declare function f<InstanceT>(Constructor: new () => InstanceT): void
// `InstanceType` should be inferred as `C<unknown>`, but is `unknown`
f(C)
Expected behavior:
InstanceType should be inferred as C<unknown>
Actual behavior:
InstanceType should be inferred as unknown
Nonsensical workarounds:
- add an explicit constructor to
C
- add an unused type parameter to the
Constructor parameter type, e.g. new <T>() => InstanceT
Playground Link: https://www.typescriptlang.org/play/?ts=3.5.1&ssl=1&ssc=1&pln=7&pc=1#code/CYUwxgNghgTiAEkoGdnwMIB4AqA+eA3gFAC+RRoSc8AZgK4B2YALgJYD2DtmAkg8syhMQeABTpOAmHRbsYALngMQAd3iiAlPAC8+PgKFgRGxQDd2rYORriNRIA
TypeScript Version: 3.5.1+
Search Terms: generic class constructor inference
Code
Expected behavior:
InstanceTypeshould be inferred asC<unknown>Actual behavior:
InstanceTypeshould be inferred asunknownNonsensical workarounds:
CConstructorparameter type, e.g.new <T>() => InstanceTPlayground Link: https://www.typescriptlang.org/play/?ts=3.5.1&ssl=1&ssc=1&pln=7&pc=1#code/CYUwxgNghgTiAEkoGdnwMIB4AqA+eA3gFAC+RRoSc8AZgK4B2YALgJYD2DtmAkg8syhMQeABTpOAmHRbsYALngMQAd3iiAlPAC8+PgKFgRGxQDd2rYORriNRIA