我有一个实例化函数,它返回所提供类的一个实例:
declare type ClassType = { new (): any }; // alias "ParameterlessConstructor"
function getInstance(constructor: ClassType): any {
return new constructor();
}
我怎样才能使函数返回 constructor
参数的 instance 而不是 any
,这样我就可以实现类型此功能的消费者安全吗?
最佳答案
好吧,这太简单了,我只需要绕过我自己的代码设置的界限。
关键是将构造函数
参数指定为返回泛型类型的新类型,这是相同泛型类型T
由 getInstance
函数返回:
function getInstance<T>(constructor: { new (): T }): T {
return new constructor();
}
这将产生正确的结果:
class Foo {
public fooProp: string;
}
class Bar {
public barProp: string;
}
var foo: Foo = getInstance(Foo); // OK
var bar: Foo = getInstance(Bar); // Error: Type 'Bar' is not assignable to type 'Foo'
关于typescript - 以类作为参数并返回该类实例的函数的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36500861/