Saltar al contenido

Agregar propiedades a una clase a través de decoradores en TypeScript

Posterior a investigar en varios repositorios y sitios al final descubrimos la solución que te compartiremos a continuación.

Solución:

Los decoradores por diseño no pueden cambiar el tipo de una clase. Esto todavía está en discusión y parece que hasta que se finalice la propuesta del decorador, el equipo no cambiará el comportamiento. Puede usar mixins para esta tarea (lea sobre mixins en ts)

Usando mixins, el código se vería así:

function classDecorator(constructor: T) 
    return class extends constructor 
        newProperty = "new property";
        hello = "override";
    


const Greeter = classDecorator(class 
    property = "property";
    hello: string;
    constructor(m: string) 
        this.hello = m;
    
);
type Greeter = InstanceType // have the instance type just as if we were to declare a class

console.log(new Greeter("world").newProperty);

function classDecorator(constructor: T) 
    return class extends constructor 
        newProperty = "new property";
        hello = "override";
    

interface classInterface 
    newProperty: string;
    hello: string;


//trick
interface Greeter extends classInterface  ;

@classDecorator
class Greeter 
    property = "property";
    hello: string;
    constructor(m: string) 
        this.hello = m;
    

const b = new Greeter();
console.log(b.newProperty);

Parece que podemos usar el truco de la interfaz para resolver el problema. Referencia del truco: https://stackoverflow.com/a/52373394/4831179

Si guardas algún recelo o disposición de acrecentar nuestro artículo puedes realizar una interpretación y con deseo lo estudiaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *