我正在尝试在Typescript中解决这个特定情况:
abstract class foo {
abstract bar();
}
class Foo1 extends foo {
bar() {
alert(1);
}
y: number = 3;
}
class Foo2 extends foo {
bar() {
alert(2);
}
}
let myFooClasses: Array<typeof foo> = [];
myFooClasses.push(Foo1);
myFooClasses.push(Foo2);
myFooClasses.forEach((item) => {
let a = new item();
a.bar();
})
具体来说,问题是myFooClasses
在技术上可能包含foo
这是抽象的,而Typescript会对此发出警告。但我真的想将myFooClasses
的类型限制为继承自foo
的具体类。有没有办法在Typescript中指定它?
答案 0 :(得分:4)
您的数组类型应为:
let myFooClasses: Array<{ new (): foo }> = [];
然后这个:
myFooClasses.push(foo);
产生此错误:
类型foo&#39;类型的论证不能分配给类型的参数 &#39; {new():foo}&#39;。无法为a分配抽象构造函数类型 非抽象构造函数类型。
你也可以这样做:
type FooConstructor = { new (): foo };
let myFooClasses: FooConstructor[] = [];