Decorators, Properties (decoradores de propiedades)

Un decorador de propiedades es declarado antes de la declaración de la propiedad. Y no puede ser utilizado para decorar ningún otro scope como podría ser un método o una clase.

La expresión para el decorador de la propiedad será llamada como una función en tiempo de ejecución, con los siguientes argumentos:

  • La función constructora de la clase para un miembro estático o el prototype de la clase para una instancia.
  • El nombre del miembro.

El Property Descriptor no es proporcionado como argumento para un decorador de propiedades.

function Writable(value: boolean) {
    return function (target: any, propertyKey: string): any {
        console.log("target", target); // PostRequest {}
        console.log("propertyKey", propertyKey); // _email
        const descriptor: PropertyDescriptor = {
            writable: value,
        };
        return descriptor;
    };
}

class PostRequest {
    @Writable(true)
    public _email: string = "";
}

const miRequest = new PostRequest();
miRequest._email = "[email protected]";

Le hemos indicado a nuestra clase PostRequest que la propiedad _email es escribible mediante el decorador Writable.

Si cambiamos el valor del argumento true a false, y volvemos a ejecutar el código, obtendremos esto en la salida.

TypeError: Cannot assign to read only property '_email' of object '#<PostRequest>'

Lo anterior debido a que hemos indicado que la propiedad _email no es escribible.