Abstrakte metoder i TypeScript-mixins
Jeg vil at en Typescript-miksin skal ha en abstrakt metode som implementeres av klassen den blandes inn i. Noe sånt som dette.
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 +"... ")
}
};
Nå fungerer dette, men jeg skulle virkelig ønske at baseFunc i mixinen kunne være abstrakt for å sikre at den blir implementert i Foo. Finnes det en måte å gjøre dette på, siden abstract baseFunc(s:string); sier at jeg må ha en abstrakt klasse, noe som ikke er tillatt for mixiner...
Svar #1
Anonym klasse kan ikke være abstrakt, men du kan fortsatt erklære lokal mixin-klasse som er abstrakt slik:
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 +"... ")
}
};
