键入以类作为参数的函数,并返回该类的实例

时间:2016-04-08 13:28:24

标签: typescript

我有一个实例化函数,它返回提供的类的实例:

declare type ClassType = { new (): any }; // alias "ParameterlessConstructor"

function getInstance(constructor: ClassType): any {
    return new constructor();
}

我怎样才能使函数返回constructor参数的实例而不是any,这样我就可以为这个函数的使用者实现类型安全?

1 个答案:

答案 0 :(得分:3)

嗯,这简直太容易了,我只能绕过我自己代码设置的界限。

关键是将constructor参数指定为返回泛型类型的新类型,即相同泛型类型TgetInstance函数返回:

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'