/ / Абстракционни методи в текстови миксини - машинопис, абстракт, миксини

Абстрактни методи в миксери на машинописни машини - пишеща машина, абстракт, миксини

Искам Typescript Mixin да има абстрактен метод, който се изпълнява от смесения клас.

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

Сега, това работи, но наистина бих искал baseFunc в mixin да бъде абстрактен, за да се гарантира, че той е реализиран в Foo. Има ли някакъв начин да се направи това, както abstract baseFunc(s:string); казва, че трябва да имам абстрактен клас, който не е разрешен за миксини ...

Отговори:

3 за отговор № 1

Анонимният клас не може да бъде абстрактен, но все още можете да декларирате локален клас миксин, който е абстрактен по следния начин:

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