Cuando defino un decorador parametrizado para el método, el decorador comienza a ejecutarse antes de que se ejecute el método.
Quiero que el decorador se ejecute después de llamar al método.
function fooDecorator(value: boolean) { console.log('fooDecorator init'); return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) { }; } class Foo{ @fooDecorator(true) foo(){ } } app.listen(5000, () => console.log("server started")); // Output fooDecoratorinit server startedLos decoradores de métodos de TypeScript se ejecutan durante la inicialización de la clase, por lo que pueden decorar el método; ver la documentación . Si desea que un decorador haga algo cuando se llama al método, haga que el decorador ajuste el método en otra función que haga lo que usted desea que haga:
function fooDecorator(flag: boolean) { return function (target: any, propertyKey: string; descriptor: PropertyDescriptor) { const original = target[propertyKey]; return { ...descriptor, value(...args: any[]) { console.log("Inserted behavior, flag = " + flag); return original.apply(this, args); } } }; } class Foo{ @fooDecorator(true) foo(){ console.log("Original foo"); } } const f = new Foo(); f.foo();Producción:
Comportamiento insertado, bandera = verdadero Foo original