【问题标题】:Typescript type of concrete subclasses of an abstract class抽象类的具体子类的打字稿类型
【发布时间】:2016-10-03 18:21:25
【问题描述】:

我正在尝试在 Typescript 中解决这个特定情况:

Typescript Playground link

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

【问题讨论】:

    标签: typescript typescript1.8


    【解决方案1】:

    你的数组类型应该是:

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

    然后是这个:

    myFooClasses.push(foo);
    

    产生这个错误:

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

    你也可以这样做:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-15
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 2020-04-20
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多