Um momento
Aula 29
Cursos / Aprenda TypeScript - Tutorial Básico Vindo do JavaScript
Como Criar um Setter (usando set) em TypeScript

Summary

Resumo da Aula sobre Getters e Setters em TypeScript

Introdução

  • Nesta aula, discutiremos o conceito de getters e setters, que estão presentes em JavaScript e TypeScript.

Atributos Privados

  • No TypeScript, pode-se definir atributos como private.
  • Exemplo: Maria.nome não pode ser acessado diretamente porque é privado.

Setter

  • Para modificar um atributo privado, utiliza-se um setter.
  • Exemplo de implementação:
    set nome(novoNome: string): void {
        this.nome = novoNome;
    }
    
  • O setter é um método público e não retorna nada (void).

Getter

  • Para obter o valor de um atributo privado, utiliza-se um getter.
  • Exemplo de implementação:
    get nome(): string {
        return this.nome;
    }
    
  • O getter retorna uma string e também é um método público.

Exemplo de Funcionamento

  • Após implementar os getters e setters, o uso do Node.js permite verificar se o código funciona corretamente.
  • Exemplo mostrado: "Oi, meu nome é Maria, o nome do indivíduo é João".

Abordagem Alternativa com Sintaxe Implícita

  • É possível usar a palavra-chave set de forma mais implícita sem alterar a visibilidade do atributo.
  • Para evitar conflitos, recomenda-se usar um underscore antes do nome dos atributos privados.
  • Exemplo:
    private _nome: string;
    
    set nome(novoNome: string) {
        this._nome = novoNome;
    }
    

Compilação e Problemas

  • Problemas de compilação podem ocorrer caso o target do compilador seja muito antigo (ex: ES3).
  • Recomenda-se usar ES5 ou superior para evitar conflitos e erros de tipo.

Conclusão

  • A aula conclui que a compreensão de getters e setters é essencial para trabalhar com atributos privados em TypeScript. Uma próxima aula abordará ajustes de configuração do compilador.

Video Transcript

Olá pessoal, na esta aula vamos falar do conceito de getter etc. Na verdade, já tem até no JavaScript, não é só do TypeScript. Mas vamos ver aqui. Então, o sinal de que até realmente nós definimos essa prioridade no nome do indivíduo como private. Isso significa que se nós quisermos aqui mudar o nome do indivíduo Maria, Maria.nome, para João, por exemplo, não vai dar certo porque ele está reclamando. Ah, o tipo nome é privado. Normalmente, na maneira tradicional, para você mudar o nome de um objeto, você tem que usar o setter. E na verdade, o setter seria, por exemplo, Maria, set nome com João. Faz uma maneira aqui. Aí você ia, vamos definir um método aqui, set nome, que leva o novo nome, né? Novo nome com o string, é o parâmetro. E vai fazer aqui, eu vou falar desse ponto o nome, igual o novo nome. Então ele vai substituir o nome da instância do indivíduo com o novo nome que é passado aqui, né? E não acho que esse aqui vai ser public, o acesso público, né? Não é privado. E a função não retorna nada, então é void. Só o detalhe disso que a gente pode adicionar da tipagem do TypeScript. O acesso do método é público, não é privado. Falou de retorno, não tem, então é void. A entrada é uma string, chamado novo nome. Legal. Agora, para poder, vamos ver aqui, para poder obter o nome, né? O console log, o nome do indivíduo é... Indi... ah, invíduo é... Uma coisa, né? E lá... Maria.nome. Também está reclamando, não dá para acessar o nome diretamente, nem para o acesso, né? Porque é privado. Como fazer isso, normalmente tem o get, chama o getNome, que é o get tradicionalmente, na Maria. Vamos definir lá em cima. GetNome, não tem nenhum argumento. Então, retorna desse ponto nome, que é o nome da instância. Vai ser público e vai retornar uma string. Ah, essa é a maneira tradicional de fazer os getters e os setters, né? Então, o getter, esse aqui, método getter, que significa para pegar o valor de um atributo do objeto, e o método setter, que é para poder atribuir o novo valor a propriedade do objeto, né? Novo atributo, novo valor do atributo. Ah, certo. Vamos dar um copilar aqui para ver se não tem problema. Vê aqui, se dá até para rodar, para você ver se funciona mesmo. Aí, vou usar o node para rodar esse arquivo. Se eu dar o ls da pasta dist, eu tenho aqui os arquivos js, então vou dar node distbarindividuo.js. Então, ele rodou usando node. Oi, meu nome é Maria, o nome do individual é João. Então, realmente, mudou o nome do indivíduo da variável Maria, agora, virou o nome virou João. E usamos os getters e setters tradicionais. Agora, tem outra maneira de fazer isso, mais implícita, que é a maneira mais familiar que você pode ter se você faz JavaScript, objeto normais literais. Por exemplo, vamos um pouco, eu não quero mais usar o set nome dessa maneira aqui. Eu queria fazer isso realmente da maneira da linha 27. Como fazer isso sem ter que mudar o nome para público? Como? Usando o... a palavra chave aqui, set, tá? Então, aqui em cima, eu vou tirar esse set aqui e vou mudar para o seguinte. Então, vai ser nome, o nome da função, mas aqui antes eu vou falar set, tá? Nem se esse público é antes ou depois. Vamos ver se não dá problema depois. Então, é o set aqui, agora, para poder usar essa palavra chave aqui e poder falar sim, esse nome aqui não pode ser o mesmo nome da propriedade privada, porque vai dar conflito. Então, normalmente, o pessoal faz o seguinte, eles vão lá na linha 3, por exemplo, adiciona um underscore antes do nome para mudar o nome para não ter conflito com o mesmo propriedade. Que eu tenho propriedade nome e nome, não pode ter duas propriedades com o mesmo nome. Então, normalmente, o pessoal adiciona o underscore aqui antes para dizer que é propriedade privada. Dá-se um maneira aqui, você muda aqui desse ponto nome no seu setter, do novo nome, e aqui no constructor, não se esqueça, que mudou o nome, vai ser o underscore nome, no comprimentar também, underscore nome, tá? Esse é o problema de usar o setter, não pode ter a mesma propriedade, o nome da função setter com o atributo, né? Deixa eu comentar o getter só para a gente ver só o setter. Vou aqui embaixo também, vou comentar essa linha 27. Não, não, a linha 30, tá? Então, tá reclamando aqui do quê? Ah, João, mas vamos ver. Talvez seja porque eu tenho publica ali, será um novo nome. Cadê esse? Tá dando problema aqui, acessores, realmente disponível quando dá S5 e acima, né? Certo. E não é? Vou dar o compilador aqui. Talvez seja a configuração do meu compilador. Vamos ver aqui. Vou ver a configuração aqui do playground. Target 27. Vamos copiar o código aqui para ver. No playground... Ah, está desenhando outra coisa. Aqui, aqui, certo. Então, vamos remover isso. Ele não gosta que tenha o valor de retorno, o tipo de valor definido pelo setter. Então, vamos voltar lá. Vamos ver aqui. Então, eu não gosto de ter esse aqui para o setter. E não tem problema mais. Eu acho que o meu compilador precisa de uma opção do target. Vamos ver se S5 funciona do S3. Target é para mudar o código aqui no lado direito, ele vai ser transpilado para esse código. Noite aqui que o meu tem esse mesmo problema, o target aqui S3. Eita, é antigo, hein? Vesta é um S3 do JavaScript. Noite aqui que o lado direito é S3. Se eu mudar para S5, ele vai funcionar sem aquele erro no nome. E parece que o meu compilador local está compilando, na verdade, para S3. Mas eu queria pelo menos S5, né? Então, tem uma maneira de mudar isso na opção lá. Vamos ver aqui. Isso na próxima aula. Tá? Então, até lá.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: