TypeScript中的泛型:如何从类中推断实例的类型

时间:2016-10-29 12:35:46

标签: class generics typescript instance typeof

工厂函数创建类的实例:

class A {
    name: string
}
function factory<T>(Cl): T {
    return new Cl()
}
let a = factory<A>(A)
a.name // OK

我想避免重复A in factory<A>(A)。泛型实例类型应该能够从类类型中推断出来,不应该是?

我试过这段代码:

function factory<T>(Cl: typeof T): T { // Error: Cannot find name 'T'
    return new Cl()
}

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:2)

基于Typescript documentation

  

使用泛型在TypeScript中创建工厂时,这是必要的   通过构造函数引用类类型。

所以你必须做这样的事情:

function factory<T>(Cl: { new(): T; }): T {
    return new Cl();
}

在上面的代码中,Cl必须是至少具有返回T泛型类型的构造函数的类型。

因此类型推断将起作用:

let a = factory(A);
a.name;

你不需要指定A的类型,因为编译器知道它。