Como gerar TypeScript a partir de JSON
- Cole um JSON de exemplo. Quanto mais itens os arrays tiverem, melhor será a detecção de campos opcionais e unions.
- Defina o nome do tipo raiz e escolha
interfaceoutype, com ou semexportereadonly. - Copie o código TypeScript para o seu projeto ou baixe-o como arquivo
.ts.
Como os tipos TypeScript são deduzidos do JSON
| JSON | TypeScript |
|---|---|
"Ada" | string |
42, 3.14 | number |
true | boolean |
null junto com outros valores | uma union como string | null |
"address": {"city": "Paris"} | uma interface Address separada |
"users": [{"id": 1}] | User[] – o nome do item fica no singular |
| uma chave ausente em alguns itens do array | uma propriedade opcional key?: |
[1, "a"] | (string | number)[] |
[] | unknown[] |
{} | Record<string, unknown> |
Exemplo
O JSON {"id": 1, "name": "Ada", "tags": ["admin"], "manager": null} vira:
export interface Root { id: number; name: string; tags: string[]; manager: null; }
Renomeie Root para algo significativo, como User ou ApiResponse. Objetos aninhados com exatamente a mesma estrutura – um endereço de cobrança e um de entrega, por exemplo – compartilham uma única interface, e chaves que não são identificadores válidos ficam entre aspas, ex.: "first-name": string.
Perguntas frequentes
Interface ou type: qual escolher?
Para formatos de objeto, os dois se comportam da mesma forma. Interfaces podem ser estendidas e mescladas, enquanto aliases de type também podem descrever unions. Muitas equipes usam interfaces para objetos; siga o estilo do seu código.
Como os campos opcionais são detectados?
Objetos dentro do mesmo array são mesclados. Uma chave que falta em alguns deles vira opcional (key?:), e uma chave com valores de tipos diferentes vira uma union.
Isso valida os dados em tempo de execução?
Não. Os tipos do TypeScript desaparecem quando o código é executado. Para verificar dados recebidos, gere um JSON Schema a partir do mesmo exemplo com o nosso gerador de JSON Schema e valide os dados com uma biblioteca de schema.
Meu JSON é enviado para um servidor?
Não. Os tipos são gerados no seu navegador, então você pode colar com segurança respostas de APIs privadas.