打字稿中的抽象方法混合



我希望 Typescript Mixin 有一个由 mix-into 类实现的抽象方法。 像这样。

class MyBase { 
}
type Constructor<T = {}> = new (...args: any[]) => T;
function Mixin<TBase extends Constructor<MyBase>>(Base: TBase) {
  return class extends Base {
    baseFunc(s: string) {};
    doA()
    {
        this.baseFunc("A");
    }
  }
};
class Foo extends Mixin(MyBase) {
    constructor()
    {
      super();
    }
    baseFunc(s: string)
    {
      document.write("Foo "+ s +"...   ")            
    }
};

现在,这行得通了,但我真的很想让 mixin 中的 baseFunc 是抽象的,以确保它在 Foo 中实现。有没有办法做到这一点,正如abstract baseFunc(s:string);所说,我必须有一个抽象类,这是不允许混入的......

匿名类不能是抽象的,但你仍然可以声明本地mixin类,它是抽象的,如下所示:

class MyBase { 
}
type Constructor<T = {}> = new (...args: any[]) => T;
function Mixin(Base: Constructor<MyBase>) {
  abstract class AbstractBase extends Base {
    abstract baseFunc(s: string);    
    doA()
    {
        this.baseFunc("A");
    }
  }
  return AbstractBase;
};

class Foo extends Mixin(MyBase) {
    constructor()
    {
      super();
    }
    baseFunc(s: string)
    {
      document.write("Foo "+ s +"...   ")            
    }
};

最新更新