给出一个类定义:
class Foo {
}
和接受类函数的类型参数化函数:
function bar<TInstance, TClass extends { new (): TInstance }>(t: TClass): TInstance {
return new t() // more complicated in reality, focus on the compiler!
}
我可以在没有类型投诉的类构造函数上调用该函数:
const x = bar(Foo)
但是,此处x
的类型为{}
,而不是Foo
。
我可以使用显式类型参数调用它:
const x = bar<Foo, typeof Foo>(Foo)
......但那真的是样板 -
有没有办法对此方法进行类型推断以避免使用样板?
答案 0 :(得分:2)
你复杂了你的功能签名,这个版本有效:
function bar<TInstance>(t: { new (): TInstance }): TInstance {
return new t();
}
const x = bar(Foo); // x is of type Foo