cómo inyectar correctamente el tipo de un método o propiedad antes de aplicar un mixin a una SuperClase dada en TypeScript
En el ejemplo a continuación, el tipo de método no se encuentra correctamente en la clase pasada como parámetro como superclase a la función mixin:
type Constructor = new (...args: any[]) => {};
function ClassMixin<TBase extends Constructor>(Base: TBase) {
return class extends Base {
method() {
console.log("method method method method");
}
}
}
const MyClass = ClassMixin(class Z {
constructor() {
this.method(); // NOT OK: Property 'method' does not exist on type 'Z'
}
});
const z = new MyClass();
z.method(); // <---- ok
ejemplo de patio de juegos
Encontré una solución alternativa para que funcione, pero estoy buscando una solución más 'automática', revisa la solución alternativa a continuación:
type Constructor = new (...args: any[]) => {};
function ClassMixin<TBase extends Constructor>(Base: TBase) {
return class extends Base {
method() {
console.log("method method method method");
}
}
}
interface ClassMixinInterface {
method(): void
}
interface Z extends ClassMixinInterface { }
class Z {
constructor() {
this.method(); // <---- ok
}
}
const MyClass = ClassMixin(Z);
const z = new MyClass();
z.method(); // <---- ok
ejemplo de solución alternativa para el patio de juegos