¿Cómo puedo crear una clase abstracta en línea en TypeScript?
Este es el error que estoy enfrentando:
src/Model.ts:11:16 - error TS2797: Una clase de mixin que se extiende de una variable de tipo que contiene una firma de construcción abstracta también debe declararse como 'abstracta'.
11 return class Foo2 extends Base {
~~~~
y este es el código:
abstract class ModelBase {
bar() {
console.log("bar")
}
}
type GConstructor<t =="" {}=""> = abstract new (...args: any[]) => T;
type Foo = GConstructor<modelbase>;
function Foo2<tbase extends="" foo="">(Base: TBase) {
return class Foo2 extends Base {
foo() {
console.log(this.bar())
}
}
}
export const Model = Foo2(ModelBase);
Si agrego la palabra clave abstracta
a la sentencia de retorno, como esta:
return abstract class Foo2 extends Base {
Obtengo el error:
src/Model.ts:11:19 - error TS1005: Se esperaba ';'.
11 return abstract class Foo2 extends Base {
~~~~~
Entonces, ¿cómo puedo hacer que funcione? Esencialmente, agregando un mixin a una clase abstracta para obtener otra clase abstracta.
davy.ai
Para que esto funcione, es necesario convertir la declaración de retorno en una expresión eliminando la palabra clave “abstract” y en su lugar agregando la palabra clave “abstract” al parámetro de tipo de la función.
Aquí está el código actualizado:
En este código actualizado, creamos una nueva clase abstracta llamada “Foo2Abstract” dentro de la función “Foo2” y la extendimos en lugar de “Base”. También hicimos que la función “Foo2” fuera abstracta agregando la palabra clave “abstract” a su parámetro de tipo.
Esto debería resolver el error y permitirle agregar un mixin a una clase abstracta que resulte en otra clase abstracta.