/ / Metodi astratti in dattiloscritti - dattiloscritto, astratto, mixin

Metodi astratti in dattiloscritti: dattiloscritto, astratto, mixin

Voglio un Typescript Mixin per avere un metodo astratto che è implementato dalla classe mista in qualcosa di simile.

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

Ora, questo funziona, ma mi piacerebbe davvero far sì che baseFunc nel mixin sia astratto per assicurare che sia implementato in Foo. C'è un modo per farlo, come abstract baseFunc(s:string); dice che devo avere una classe astratta, che non è consentita per mixin ...

risposte:

3 per risposta № 1

La classe anonima non può essere astratta, ma puoi comunque dichiarare una classe di mixin locale che è astratta come questa:

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