抽象类的具体子类的Typescript类型

8

我正在尝试解决TypeScript中的这个特定问题:

Typescript Playground 链接

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中指定这个呢?

1个回答

5

您的数组类型应该是:

let myFooClasses: Array<{ new (): foo }> = [];

然后是这个:

myFooClasses.push(foo);

产生了以下错误:

类型“typeof foo”的参数不能分配给类型“{ new (): foo }”的参数。无法将抽象构造函数类型分配给非抽象构造函数类型。

您也可以执行以下操作:

type FooConstructor = { new (): foo };
let myFooClasses: FooConstructor[] = [];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接