typescript:超类中派生类的类型

时间:2019-04-11 14:39:33

标签: typescript inheritance

我有一个抽象的打字稿课:

abstract class Abstract {

  constructor (public parent?: Abstract) {
  }

}

现在,我定义2个子类:

class Sub1 extends Abstract {

}

class Sub2 extends Abstract {

}

parent的类型为Abstract,所以这是可能的:

let sub1 = new Sub1 ();

let sub2 = new Sub2 (sub1);

但是我希望Sub1.parent必须具有类型Sub1,而Sub2.parent必须具有类型Sub2。如何在Abstract的定义中指定?

1 个答案:

答案 0 :(得分:1)

到目前为止,您的两个类都是相同的-因此能够使用Abstract的任何实例是正确的。如果您将成员字段添加到该类,则tscompiler会抱怨例如。

class Sub2 extends Abstract {
    public test: number;
    constructor (parent?: Sub2) {
        super(parent);
    }
}

let sub2 = new Sub2 (sub1); // will not work