Decorators, Classes (decoradores de clases)

Un Class Decorator (Decorador de Clase) es declarado justamente antes de la clase. La clase decorator es aplicada al constructor de la clase, y puede ser utilizado para observar, modificar o reemplazar la definición de una clase.

export function cambiarNombre(_nombre: string) {
    return function <T extends { new (...args: any[]): {} }>(constructor: T) {
        return class extends constructor {
            nombre = _nombre;
        };
    };
}

export function cambiarAlias(_alias: string) {
    return function <T extends { new (...args: any[]): {} }>(constructor: T) {
        return class extends constructor {
            alias = _alias;
        };
    };
}

export function cambiarEdad(_edad: number) {
    return function <T extends { new (...args: any[]): {} }>(constructor: T) {
        return class extends constructor {
            edad = _edad;
        };
    };
}

Si ejecutamos el siguiente bloque…

class usuario {
    constructor(
        public nombre: string,
        public alias: string,
        public edad: number
    ) {}

    saludar() {
        console.log(`Mi nombre es ${this.nombre}`);
        console.log(`me dicen ${this.alias}`);
        console.log(`y tengo ${this.edad} años`);
    }
}

const u1 = new usuario("Roberto", "Robert", 19);
u1.saludar();

La salida será…

Mi nombre es Roberto
me dicen Robert
y tengo 19 años

Pero si aplicamos los decoradores, estos reescribirán los valores enviados al constructor.

import { cambiarAlias, cambiarEdad, cambiarNombre } from "./cambiarNombre";

@cambiarNombre("Francisco")
@cambiarAlias("Paco")
@cambiarEdad(20)
class usuario {
    constructor(
        public nombre: string,
        public alias: string,
        public edad: number
    ) {}

    saludar() {
        console.log(`Mi nombre es ${this.nombre}`);
        console.log(`me dicen ${this.alias}`);
        console.log(`y tengo ${this.edad} años`);
    }
}

const u1 = new usuario("Roberto", "Robert", 19);
u1.saludar();

La salida será…

Mi nombre es Francisco
me dicen Paco
y tengo 20 años

VPN

  • Ir a la oferta de NordVPN

Moda

Accesorios