Aula 20
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
-
Interface
Indivíduo
:- Definimos uma interface simples com uma propriedade:
prenome
do tipostring
. - Criamos um objeto literal chamado
alguém
contendoprenome
esobrenome
(este último não definido na interface).
- Definimos uma interface simples com uma propriedade:
-
Verificação de Propriedades:
- Chamamos uma função chamada
imprimir
que espera um parâmetro do tipoIndivíduo
e retorna apenas oprenome
. - Ao tentar passar o objeto literal diretamente, o TypeScript gera um erro devido à presença da propriedade
sobrenome
, que não está na interface.
- Chamamos uma função chamada
-
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:
- Armazenar o objeto em uma variável.
- Usar afirmação de tipo (
as
). - 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: