编译器可以推断出类构造函数的返回类型吗?

时间:2017-05-23 19:14:40

标签: typescript

给出一个类定义:

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)

......但那真的是样板 -

有没有办法对此方法进行类型推断以避免使用样板?

1 个答案:

答案 0 :(得分:2)

你复杂了你的功能签名,这个版本有效:

function bar<TInstance>(t: { new (): TInstance }): TInstance {
    return new t();
}

const x = bar(Foo); // x is of type Foo