Um momento
Aula 20
Cursos / Aprenda TypeScript - Tutorial Básico Vindo do JavaScript
Cheque de Propriedades em Excesso no Type Script

Summary

Resumo da Aula de TypeScript

Nesta aula, abordamos o conceito de verificação de propriedades em excesso no TypeScript, utilizando como base uma interface chamada Indivíduo.

Tópicos Abordados

  1. Interface Indivíduo:

    • Definimos uma interface simples com uma propriedade: prenome do tipo string.
    • Criamos um objeto literal chamado alguém contendo prenome e sobrenome (este último não definido na interface).
  2. Verificação de Propriedades:

    • Chamamos uma função chamada imprimir que espera um parâmetro do tipo Indivíduo e retorna apenas o prenome.
    • Ao tentar passar o objeto literal diretamente, o TypeScript gera um erro devido à presença da propriedade sobrenome, que não está na interface.
  3. Como Resolver o Problema:

    • Armazenar em Variável: A primeira solução é armazenar o objeto literal em uma variável antes de passá-lo para a função. Assim, não ocorrerá erro.
    • Afirmação de Tipo: Outra solução é utilizar afirmação de tipo, adicionando as Indivíduo após o objeto literal, informando ao compilador que você sabe o que está fazendo.
    • Adicionar Propriedades Extras: Uma terceira abordagem é modificar a interface Indivíduo para permitir qualquer propriedade extra, utilizando um índice, mas esta prática deve ser evitada para não comprometer a tipagem.

Conclusão

Concluímos que a checagem de propriedades em excesso é uma característica importante do TypeScript. Discutimos três maneiras de lidar com objetos literais com propriedades em excesso:

  1. Armazenar o objeto em uma variável.
  2. Usar afirmação de tipo (as).
  3. Permitir propriedades extras na interface, com cautela.

Até a próxima aula!

Video Transcript

Olá pessoal, estamos de volta com mais uma aula de TypeScript. Nesta aula vamos falar de checa de propriedades em excesso. Vamos partir do exemplo que nós fizemos anteriormente da interface do indivíduo. Essa interface de indivíduo tem várias propriedades e nós definimos um objeto literal aqui embaixo armazenando na variável alguém. Passamos o alguém para chamar da função e preminar. O que eu vou fazer? Eu vou pegar parte desse exemplo com algumas certas sessões retiradas e vou colar lá naquele playground do TypeScript no navegador. Então eu vou aqui no navegador. Eu já colei aqui. Se você quiser saber onde está o playground é no www.TypeScriptLangue.org.play. Então temos aqui a interface indivíduo. Nesse caso só tem uma propriedade, bem simples. Interface do nome indivíduo, hoje a propriedade é prenome do tipo string. Definimos aqui embaixo um objeto literal que tem duas propriedades, o prenome e o sobrenome, com valor isona e Silva respectivamente. Note que o sobrenome aqui é uma propriedade que não existe na interface indivíduo que definimos acima. Chamamos a função e preminar prenome e passamos a variável alguém como argumento. Na definição de prenome levamos o indivíduo, que é do tipo interface indivíduo, e a função apenas retorna o prenome do indivíduo. Nesse caso note que essa função não utiliza o sobrenome, apenas utiliza uma propriedade única prenome que já está definida na interface do indivíduo. Não tem uma propriedade a mais nesse objeto aqui literal que é armazenado na variável alguém que é passada como argumento para imprimir prenome. Então não há nenhum erro agora, mas note o que acontece se eu pegar esse objeto aqui literal, recortar, eu vou comentar essa linha e vou colar aqui no lugar da variável alguém. Note que agora o que acontece é que tem um erro na linha 13. Vamos ler esse erro. Está dizendo que o argumento do tipo prenome com propriedades prenome e sobrenome não pode ser atribuído ao parâmetro do tipo indivíduo, porque o objeto literal, note, objeto literal só pode especificar propriedades que são já conhecidas e o sobrenome não existe no tipo indivíduo. Então o detalhe é o que é o seguinte, se você utilizar o objeto literal e tiver uma propriedade a mais, se isto é em excesso, que não está presente naquela interface indivíduo, ele vai reclamar. Esse é um tratamento especial de objetos literais, o check de propriedade em excesso. Agora, como consertar isso? A gente já tinha feito, em vez de passar o objeto literal diretamente aqui na chamada da função, você pode armazenar primeiro em uma variável, nesse caso chamada alguém, nesse caso ele não vai reclamar, tá? Mas se você quiser realmente fazer isso e passar o objeto literal já na chamada, há uma maneira de fazer isso funcionar. Você pode usar a afirmação de tipo. É só dizer o seguinte, vai aqui, logo após o objeto literal, você fala as indivíduo. Então você diz para o compilador do TypeScript, opa, eu sei o que eu estou fazendo, você pode interpretar esse objeto literal como se fosse realmente o indivíduo. Então o compilador não vai reclamar, tá? Tá bom? Tem também, ainda outra maneira de você fazer isso, eu vou só demonstrar, mas normalmente, tome cuidado com você fazer essas coisas. Outra maneira é você adicionar aqui na interface indivíduo, você pode dizer assim, você pode permitir qualquer outra propriedade que seja a propriedade. Eu vou dizer dessa maneira, nome da propriedade, ou normalmente no inglês você pode dizer propname, do tipo string você pode ser n. Com isso ele vai remover o eu, o que é que é isso aqui? Tá dizendo que pode ter qualquer outra propriedade do tipo string, porque nós indexamos com propriedades de string e o valor, nesse caso pode ser qualquer valor. Agora tome cuidado com isso, não recomendo fazer normalmente, porque ele está usando n, normalmente a gente quer evitar usar n a qualquer custo, só no caso final que a gente usa n. Então essa outra maneira, tome cuidado a fazer isso. Vou recortar, vou botar esse indivíduo aqui, pode até voltar para armazenar na variável para não ter mais problema. Tá bom então? Nessa aula aprendemos sobre o cheque de propriedades em excesso, o caso do objeto literal, se o objeto literal foi passado diretamente a uma função e essa função tem como parâmetro uma interface e o objeto literal que foi passado a interface ter, tem mais propriedades em excesso que não aparecem na definição da interface, o typescript vai reclamar, uma maneira de consertar, tem três maneiras que eu demonstrei, a primeira é só pegar, extrair o objeto literal e armazenar primeiro em uma variável, aí você pega o nome da variável e passa como argumento e não vai ter reclamação do compilador. Outra maneira é se você realmente quiser deixar o objeto literal como argumento direto na chamada da função, logo após o objeto literal você descreve as, as, espaço, nome, nesse caso da interface, objeto literal é individuo e o compilador não vai reclamar, ainda outra maneira seria você adicionar, permitir que a interface, nesse caso, individuo, aceite qualquer outra, outras propriedades extras, mas tome muito cuidado a fazer isso devido ao N. Não por essa aula só e até a próxima.
Nenhum comentário ainda (loading...)
Nenhum comentário ainda (loading...)
Gostou da aula? 😆👍
Apoie nosso trabalho com uma doação: