Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Nome dos parâmetros na função de retorno de um Decorator

Olá.

Na aula, o instrutor definiu três parâmetros na função que o decorator retorna:

export function logarTempoDeExecucao() {
    return function(
        target: any, 
        propertyKey: string, 
        descriptor: PropertyDescriptor) { ... }
}

Neste exercício, o segundo parâmetro recebeu um nome diferente (key ao invés de propertyKey):

return function(
target: any, 
key: string,
descriptor: PropertyDescriptor) { ... }

Por favor, gostaria de entender se o nome dos parâmetros da função retornada por um decorator pode ser qualquer nome. Ou no caso esse key é um parâmetro diferente de propertyKey?

Obrigado.

1 resposta
solução!

Oi Matheus, tudo bem?

Desculpe a demora em retornar.

É uma excelente pergunta! Na verdade, o nome dos parâmetros na função retornada por um decorator pode ser qualquer nome que você desejar.

Porém, é importante lembrar que a posição dos parâmetros é fundamental. Os parâmetros da função retornada por um decorator seguem uma ordem específica: primeiro, o objeto que será decorado ("target"); depois, o nome da propriedade que será decorada ("key" no seu exemplo) e, por último, o descritor da propriedade ("descriptor").

Ou seja, a posição dos parâmetros é fixa, mas os nomes podem ser escolhidos livremente. Se você preferir usar "propertyKey" em vez de "key", por exemplo, não há problema algum.

Aqui está um exemplo para ilustrar como isso funciona:

function meuDecorator() {
  return function(target: any, key: string, descriptor: PropertyDescriptor) {
    console.log("target:", target);
    console.log("key:", key);
    console.log("descriptor:", descriptor);
  }
}

class MinhaClasse {
  @meuDecorator()
  meuMetodo() {}
}

Observe que o nome do segundo parâmetro no decorator ("key") é diferente do nome do segundo parâmetro na definição da classe ("meuMetodo"). Isso não causa nenhum problema, pois a posição dos parâmetros é respeitada.

Espero que tenha esclarecido sua dúvida!

Um abraço e bons estudos.