Pesquisa de site

javascript - Decoradores para funções


Pelo que vejo, decoradores geralmente podem ser usados com classes e métodos dentro de classes. Existe uma maneira de usar decoradores com funções normais como no código abaixo:

@myDecorator()
function someFunction() {
  // do something
}

someFunction(); // running the function with the decorator.

Resposta #1

Não com a proposta atual. Decorar funções independentes, inicializadores de objetos e seus conteúdos, ou outras coisas, pode muito bem ser propostas subsequentes, mas a proposta atual apenas permite decorar classes e seus conteúdos.

Resposta #2

Decoradores não são suportados em funções de acordo com a proposta atual

Você pode alcançar um resultado semelhante usando uma chamada de função simples:

function myDecorator<Args extends any[], R>(fn: (...a: Args)=> R): (...a:Args) =>R {
    return function (...a: Args) {
        console.log("Calling");
        return fn(...a);
    } 
}
const someFunction = myDecorator(function () {
    console.log("Call");
});

someFunction(); 

Artigos relacionados