typescript mixin 中的抽象方法

Abstract methods in typescript mixins

我想要一个 Typescript Mixin 有一个由 mixed-into class 实现的抽象方法。像这样。

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); 所说,我必须有一个抽象 class,这对于混入是不允许的...

Anonymous class 不能是抽象的,但是你仍然可以像这样声明局部mixin class 是抽象的:

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 +"...   ")            
    }
};