Como converter JSON para TypeScript (interfaces automáticas)
Transforme um JSON em interfaces TypeScript em segundos. Veja como objetos aninhados, listas e valores nulos são tratados e boas práticas para tipar respostas de API.
Publicado em
Por que tipar o JSON
Quando você consome uma API, o resultado de resposta.json() chega como any: o TypeScript não sabe quais campos existem, não avisa sobre erros de digitação e não autocompleta. Escrever as interfaces à mão para respostas grandes é trabalhoso e fácil de errar. Gerar os tipos a partir de um exemplo real resolve o problema em segundos.
Passo a passo
- Abra o Transform e escolha a conversão JSON → TypeScript.
- Cole no campo de entrada um JSON representativo, por exemplo uma resposta copiada da aba Network do DevTools do navegador.
- Em Nome raiz, informe o nome do tipo principal (aqui,
Usuario). - Clique em Transformar, copie o resultado e cole no seu arquivo de tipos.
Exemplo
Com este JSON como entrada, o resultado real da ferramenta é o da direita:
{
"id": 1,
"nome": "Ana Souza",
"email": "ana@exemplo.com",
"ativo": true,
"tags": ["admin", "beta"],
"endereco": { "cidade": "São Paulo", "cep": "01310-100" },
"pedidos": [
{ "id": 10, "total": 149.9 },
{ "id": 11, "total": 20, "cupom": "BEMVINDO" }
]
}interface Endereco {
cidade: string;
cep: string;
}
interface Pedido {
id: number;
total: number;
}
interface Pedido1 {
id: number;
total: number;
cupom: string;
}
interface Usuario {
id: number;
nome: string;
email: string;
ativo: boolean;
tags: string[];
endereco: Endereco;
pedidos: (Pedido | Pedido1)[];
}- Cada objeto aninhado vira uma interface própria:
enderecogerou a interfaceEndereco, e a raiz usa o nome que você escolheu. - Listas de valores simples viram
string[],number[]e assim por diante. - Na lista
pedidos, os dois itens têm formatos diferentes (só o segundo temcupom), então a ferramenta gerou um tipo para cada formato e os uniu com|.
Usando os tipos no código
const resposta = await fetch("/api/usuarios/1");
const usuario: Usuario = await resposta.json();
console.log(usuario.endereco.cidade); // o editor agora autocompleta e checa os camposAtenção: anotar o tipo com : Usuario diz ao compilador o que esperar, mas não confere se a resposta realmente tem esse formato. Se a API mudar, o erro só aparece em execução. Para dados que vêm de fora da sua aplicação, combine os tipos com uma validação em tempo de execução.
Casos especiais
- Valores nulos: um campo
nullno exemplo vira o tiponull. Se em outras respostas ele traz uma string, ajuste parastring | null. - Listas vazias: sem itens para inspecionar, o tipo sai como
unknown[]. Troque pelo tipo correto ou use um exemplo com pelo menos um item. - Números: inteiros e decimais viram
number. - Datas: o JSON não tem tipo de data; elas chegam como texto e viram
string.
Boas práticas
Um exemplo só não mostra tudo
Os tipos refletem apenas o JSON que você colou. Campos que aparecem só às vezes ficam de fora ou são tratados como obrigatórios. Se tiver mais de uma resposta de exemplo, gere a partir da mais completa e marque os campos opcionais com? depois.- Use uma resposta real e completa, não um trecho editado à mão.
- Revise os nomes gerados e os campos que podem ser nulos ou opcionais.
- Se a sua API publica uma especificação OpenAPI, gerar os tipos a partir dela é mais confiável do que inferir de um exemplo.
Perguntas frequentes
A ferramenta gera type ou interface?
Gera interfaces, uma para cada objeto encontrado no JSON. Se você prefere type, basta trocar a palavra interface por type e adicionar o sinal de igual antes das chaves.
Funciona com um JSON grande?
Sim. O campo de entrada aceita até 10 milhões de caracteres, e a conversão roda no seu navegador, sem enviar o conteúdo para nenhum servidor.
Posso colar a resposta real da minha API?
A conversão acontece localmente e nada é enviado a servidores. Ainda assim, por boa prática, troque tokens, senhas e dados pessoais por valores fictícios antes de colar qualquer conteúdo em qualquer site.
Como faço para validar os dados em tempo de execução?
Tipos do TypeScript não existem depois da compilação. Para validar dados que chegam de fora, converta o mesmo JSON em um schema Zod, como mostra o guia sobre JSON para Zod.