我有一个实例化函数,它返回提供的类的实例:
declare type ClassType = { new (): any }; // alias "ParameterlessConstructor"
function getInstance(constructor: ClassType): any {
return new constructor();
}
我怎样才能使函数返回constructor
参数的实例而不是any
,这样我就可以为这个函数的使用者实现类型安全?
答案 0 :(得分:3)
嗯,这简直太容易了,我只能绕过我自己代码设置的界限。
关键是将constructor
参数指定为返回泛型类型的新类型,即相同泛型类型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'