Olá, Danilo! Tudo bem?
É comum que os decorators tenham estruturas semelhantes, pois eles seguem um padrão definido pelo TypeScript. Em relação aos parâmetros target
, propertyKey
e descriptor
, eles são obrigatórios na criação de um decorator e representam respectivamente: a classe alvo, o nome do método ou propriedade e a descrição do método ou propriedade.
Quanto ao trecho de código que você mencionou, ele é utilizado para modificar o comportamento do método. O const metodoOriginal = descriptor.value
armazena o valor original do método e o descriptor.value = function(...args:[])
substitui o método original por uma nova função que pode ter um comportamento modificado.
Vale lembrar que a estrutura exata do decorator pode variar de acordo com a necessidade do desenvolvedor, mas a utilização dos parâmetros target
, propertyKey
e descriptor
é obrigatória.
Espero ter ajudado.
Um abraço e bons estudos!