Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Tipagem do retorno de uma API

Olá! Estou construindo um projeto pessoal usando a API Rest Countries: https://restcountries.com/v3.1/all

Estou com uma dúvida que é a seguinte, estou fazendo a requisição para a API com o axios. Ao tentar iterar sobre os itens, não consigo pois aparece que o item é do tipo any, e não permite any implícito. Sei que está aparecendo isso pois precisamos tipar o retorno da API.

Print código

A questão é: como fazer a tipagem correta do retorno da API ?

Eu sei que preciso criar uma interface, porém o retorno da API é um array de objetos, onde cada objeto possui inúmeras propriedades, como podem ver no link. Devo fazer uma interface tipando todas essas propriedades uma a uma ou existe uma forma mais fácil de fazer isso ?

Obrigada

2 respostas
solução!

Olá, Natalia! Tudo bem?

A tipagem do retorno de uma API em TypeScript pode ser um pouco trabalhosa, mas é uma ótima prática para garantir que seu código esteja seguro e previsível. Existem algumas abordagens que você pode tomar para tipar o retorno da API Rest Countries.

Uma abordagem é criar uma interface para representar a estrutura de dados que você espera receber da API. Você não precisa tipar todas as propriedades se não for usá-las todas; apenas as que você planeja utilizar em seu projeto. Por exemplo:

interface Country {
  name: {
    common: string;
    official: string;
  };
  // Adicione outras propriedades que você irá utilizar
}

// No seu código, ao realizar a requisição:
axios.get<Country[]>('https://restcountries.com/v3.1/all').then(response => {
  // Aqui o TypeScript já sabe que response.data é um array de Country
  const countries = response.data;
  // ...
});

Se a quantidade de propriedades for muito grande e você não quiser definir todas manualmente, você pode usar uma ferramenta para gerar interfaces a partir de um exemplo de objeto JSON. Existem ferramentas online como o "QuickType" ou "JSON to TS" que podem ajudar nisso.

Outra opção é usar o tipo Record<string, unknown> ou any para as propriedades que você não conhece ou não quer tipar explicitamente. Isso é menos seguro, mas pode ser uma solução temporária até você definir as interfaces corretamente.

Lembre-se de que tipar corretamente as respostas da API é uma etapa importante para garantir a qualidade e a manutenibilidade do seu código.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Perfeito!! Muito obrigada pela ajuda :)