我正在尝试在 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 中指定它?
最佳答案
你的数组类型应该是:
let myFooClasses: Array<{ new (): foo }> = [];
然后是:
myFooClasses.push(foo);
产生这个错误:
Argument of type 'typeof foo' is not assignable to parameter of type '{ new (): foo }'. Can not assign an abstract constructor type to a non-abstract constructor type.
您还可以:
type FooConstructor = { new (): foo };
let myFooClasses: FooConstructor[] = [];
关于抽象类的具体子类的 typescript 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37618525/