如何注释函数,接受typeof类(ctor函数)作为参数?

时间:2016-04-28 14:39:24

标签: typescript annotations

我有几个类,我想创建函数,它接受类(定义,而不是实例)。

class Page1 {
}
class Page2 {
}

register(Page1);
register(Page2);

function Register(pageType){..}

如何宣布pageType参数,以便register(new Page1());失败?

基本上,我想要这个C#方法的等价:

void Register(Type pageType){..}

2 个答案:

答案 0 :(得分:1)

我已经在an IoC container for TypeScript工作了一段时间,我发现这样做的最好方法是使用泛型:

class Page1 {
}

class Page2 {
}

interface Newable<T> {
    new(...args: any[]): T;
}

function register<T>(pageType: Newable<T>){}

register<Page1>(Page1); // OK
register<Page2>(Page2); // OK

register<Page1>(new Page1()); // Error
register<Page2>(new Page2()); // Error

答案 1 :(得分:0)

你可以声明一个接口'Type'扩展Function并在你的register方法中使用它

interface Type extends Function { }

function Register(pageType : Type ){..}

然后按照你的意愿使用它,

class Page1 {
}
class Page2 {
}

register(Page1);
register(Page2);