TypeScript数组类型

时间:2016-11-14 14:00:05

标签: typescript

我有以下界面:

export interface FooInterface {
    barAction(x: any) : void;
}

然后我实施它:

class FooImplA implements FooInterface {
    barAction(x: any) : void {};
}

class FooImplB implements FooInterface {
    barAction(x: any) : void {};
}

class FooImplB implements FooInterface {
    barAction(x: any) : void {};
}

现在我想要一个类型 FooImplAFooImplB(不是实例)的数组。

显然,这有效:

  let typeArray = [FooImplA, FooImplB];

但我希望它强烈打字。以下是我的想法,它不起作用:

  let typeArray: Array< (typeof FooInterface) > = [FooImplA, FooImplB];

1 个答案:

答案 0 :(得分:1)

使用您的代码:

interface FooInterface {
    barAction(x: any) : void;
}

class FooImplA implements FooInterface {
    barAction(x: any) : void {};
}

class FooImplB implements FooInterface {
    barAction(x: any) : void {};
}

let typeArray = [FooImplA, FooImplB];

typeArray变量的类型为:typeof FooImplA[],您可以将鼠标悬停在typeArray上看到in playground
原因是编译器推断出数组本身的类型,而无需明确告诉它。

如果您确实希望在代码中使用它,那么您可以执行以下操作:

type FooImplConstructor = { new (): FooInterface };

let typeArray: FooImplConstructor[] = [FooImplA, FooImplB];
// or
let typeArray = [FooImplA, FooImplB] as FooImplConstructor[];