TypeScript中的多类继承

nou*_*ass 7 javascript inheritance interface class typescript

有什么方法可以解决只允许扩展至多一个其他类的问题.

class Bar {

  doBarThings() {
    //...
  }

}

class Bazz {

  doBazzThings() {
    //...
  }

}

class Foo extends Bar, Bazz {

  doBarThings() {
    super.doBarThings();
    //...
  }

}
Run Code Online (Sandbox Code Playgroud)

目前这是不可能的,TypeScript会给出错误.可以通过使用接口来克服其他语言中的这个问题,但是在TypeScript中无法解决问题.

欢迎提出建议!

Bro*_*cco 2

这可以通过接口实现:

interface IBar {
  doBarThings();
}

interface IBazz {
  doBazzThings();
}

class Foo implements IBar, IBazz {
  doBarThings() {}
  doBazzThings(){}
}
Run Code Online (Sandbox Code Playgroud)

super但如果你想以/ 的方式实现这一点base,那么你必须做一些不同的事情,如下所示:

class FooBase implements IBar, IBazz{
  doBarThings() {}
  doBazzThings(){}
}

class Foo extends FooBase {
  doFooThings(){
      super.doBarThings();
      super.doBazzThings();
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 但这不是多重继承,这是多个接口的单一实现,这不是一回事。多重继承包括实现的继承。 (37认同)
  • 当然它不是多重继承,TypeScript 不支持它(就像 C# 和 Java 一样)。但根据OP的要求,我提供了一些模仿该功能的替代方案。 (4认同)