工厂函数创建类的实例:
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()
}
有办法做到这一点吗?
答案 0 :(得分:2)
基于Typescript documentation:
使用泛型在TypeScript中创建工厂时,这是必要的 通过构造函数引用类类型。
所以你必须做这样的事情:
function factory<T>(Cl: { new(): T; }): T {
return new Cl();
}
在上面的代码中,Cl
必须是至少具有返回T
泛型类型的构造函数的类型。
因此类型推断将起作用:
let a = factory(A);
a.name;
你不需要指定A
的类型,因为编译器知道它。