我有以下界面:
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 {};
}
现在我想要一个类型 FooImplA
和FooImplB
(不是实例)的数组。
显然,这有效:
let typeArray = [FooImplA, FooImplB];
但我希望它强烈打字。以下是我的想法,它不起作用:
let typeArray: Array< (typeof FooInterface) > = [FooImplA, FooImplB];
答案 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[];