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

[Dúvida] dúvida

olá,

Acho que me perdi e naõ entendi direito o decorator versátil,.... Aguém aí para dar um esclarecimento. Grata

1 resposta
solução!

Oi Sonia, tudo bem?

O decorator versátil é uma funcionalidade poderosa do TypeScript que permite adicionar comportamentos extras às classes, métodos, propriedades ou parâmetros de uma forma flexível e reutilizável. Ele nos permite alterar o comportamento de uma determinada entidade sem precisar modificar sua estrutura interna.

No contexto do capítulo "Decorator de propriedade", o decorator versátil é aplicado a propriedades de uma classe. Ele pode ser usado para adicionar funcionalidades extras a essas propriedades, como validação de dados, rastreamento de alterações, entre outros.

Para ilustrar melhor, vamos considerar um exemplo simples. Suponha que você tenha uma classe chamada "Person" com uma propriedade "name". Você pode aplicar o decorator versátil a essa propriedade para adicionar uma validação de tamanho mínimo do nome:

function MinLength(minLength: number) {
  return function (target: any, propertyKey: string) {
    let value = target[propertyKey];

    const getter = () => value;
    const setter = (newValue: string) => {
      if (newValue.length < minLength) {
        throw new Error(`O valor deve ter no mínimo ${minLength} caracteres.`);
      }
      value = newValue;
    };

    Object.defineProperty(target, propertyKey, {
      get: getter,
      set: setter,
    });
  };
}

class Person {
  @MinLength(3)
  name: string;

  constructor(name: string) {
    this.name = name;
  }
}

const person = new Person("John"); // Erro: O valor deve ter no mínimo 3 caracteres.

Nesse exemplo, o decorator MinLength recebe um parâmetro minLength que define o tamanho mínimo que o valor da propriedade deve ter. Ele retorna uma função que é chamada com o alvo (a classe "Person") e a chave da propriedade ("name"). Dentro dessa função, usamos a função Object.defineProperty para definir um getter e um setter personalizados para a propriedade "name".

No getter, simplesmente retornamos o valor atual da propriedade. Já no setter, verificamos se o novo valor possui o tamanho mínimo exigido. Caso contrário, lançamos um erro informando a restrição. Por fim, atualizamos o valor da propriedade.

Dessa forma, sempre que você tentar definir um valor para a propriedade "name", o decorator será acionado e verificará se o valor atende aos requisitos mínimos de tamanho. Se não atender, uma exceção será lançada, impedindo a atribuição do valor inválido.

Essa é apenas uma das muitas possibilidades de uso do decorator versátil. Você pode criar decorators personalizados de acordo com suas necessidades, adicionando comportamentos extras às propriedades, métodos ou classes. É uma ferramenta poderosa para aprimorar a modularidade e a reutilização de código.

Espero que essa explicação tenha esclarecido suas dúvidas sobre o decorator versátil do curso. Lembre-se de que ele pode ser aplicado de diferentes maneiras, dependendo do contexto em que você está trabalhando.

Um abraço e bons estudos.