🥇 Decorators, Methods (decoradores de métodos)

Un decorador de método es declarado justo antes del método. El decorador es aplicado al descriptor de la propiedad para el método, y puede ser utilizado para observar, modificar o reemplazar la definición de un método.

El decorador de métodos tiene tres componentes:

  1. target: contiene el objetivo (la función de la clase).
  2. propertyKey: el nombre del método.
  3. descriptor: PropertyDescriptor del objeto, nos proporciona la función (método) dentro de descriptor.value y es aquí en donde podemos cambiar su comportamiento.

Suponiendo que tuviéramos un controlador en el cual un decorador proporciona la posibilidad de definir que la pagina home se despliega través de la ruta “/home” mediante el método GET.

function get(ruta: string) {
  return function (
    target: any,
    propertyKey: string,
    descriptor: PropertyDescriptor
  ) {
    const content = descriptor.value();
    descriptor.value = function (...args: any) {
      console.log("El contenido es:", content);
      console.log("La ruta de carga es:", ruta);
      console.log("El método es: get");
    };
  };
}

class Controlador {
  @get("/home")
  mostrarHome() {
    return "contenido de la pagina del home";
  }
}

const miControlador = new Controlador();
miControlador.mostrarHome();

La salida del programa será…

El contenido es: contenido de la pagina del home
La ruta de carga es: /home
El método es: get

Mediante descriptor.value se puede redefinir el método mostrarHome(), podemos incluso obtener la salida original de esta función.