有什么方法可以解决只允许扩展至多一个其他类的问题。
class Bar {
doBarThings() {
//...
}
}
class Bazz {
doBazzThings() {
//...
}
}
class Foo extends Bar, Bazz {
doBarThings() {
super.doBarThings();
//...
}
}
目前无法做到这一点,TypeScript会出错。可以通过使用接口来克服其他语言中的这个问题,但是在TypeScript中无法解决这些问题。
欢迎提出建议!
答案 0 :(得分:4)
这可以使用接口:
interface IBar {
doBarThings();
}
interface IBazz {
doBazzThings();
}
class Foo implements IBar, IBazz {
doBarThings() {}
doBazzThings(){}
}
但是如果你想以super
/ base
的方式实现这一点,那么你必须做一些不同的事情,比如:
class FooBase implements IBar, IBazz{
doBarThings() {}
doBazzThings(){}
}
class Foo extends FooBase {
doFooThings(){
super.doBarThings();
super.doBazzThings();
}
}
答案 1 :(得分:0)
这是我扩展多个类的解决方法。它提供了一些不错的类型安全性。我还没有发现这种方法的主要缺点,就像我想要多重继承一样。
首先声明要在目标类上实现的接口
interface IBar {
doBarThings(): void;
}
interface IBazz {
doBazzThings(): void;
}
class Foo implements IBar, IBazz {}
现在,我们必须将实现添加到Foo
类中。我们可以使用还实现以下接口的类mixin:
class Base {}
type Constructor<I = Base> = new (...args: any[]) => I;
function Bar<T extends Constructor>(constructor: T = Base as any) {
return class extends constructor implements IBar {
public doBarThings() {
console.log("Do bar!");
}
};
}
function Bazz<T extends Constructor>(constructor: T = Base as any) {
return class extends constructor implements IBazz {
public doBazzThings() {
console.log("Do bazz!");
}
};
}
使用类mixins扩展Foo
类:
class Foo extends Bar(Bazz()) implements IBar, IBazz {
public doBarThings() {
super.doBarThings();
console.log("Override mixin");
}
}
const foo = new Foo();
foo.doBazzThings(); // Do bazz!
foo.doBarThings(); // Do bar! // Override mixin
答案 2 :(得分:0)
这并不是真正解决问题的方法,但是还是值得考虑使用组合而不是继承。