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.