JSON para TypeScript
Cole uma amostra JSON e a ferramenta infere interfaces TypeScript que correspondem à sua estrutura. Os campos são tipados pelos valores observados (string, number, boolean, Array<T>), objetos aninhados recebem suas próprias interfaces nomeadas, e campos observados como nulos ou ausentes tornam-se opcionais (?) ou anuláveis (| null), dependendo do estilo que você preferir.
Como converter JSON para TypeScript
-
1
Cole JSON
Uma única amostra é suficiente; várias amostras melhoram a inferência de nulidade e união.
-
2
Escolha o estilo de saída
`interface` (padrão), alias `type`, ou interface somente leitura com todos os campos marcados como `readonly`.
-
3
Escolha a estratégia opcional
Marque campos como `?` (pode estar ausente) ou `| null` (sempre presente, pode ser nulo).
-
4
Copie os tipos
Cole em um arquivo `.ts` e você terá acesso fortemente tipado à resposta da API.
Exemplo
Entrada:
{ "id": 1, "name": "Alice", "age": null, "tags": ["admin", "user"], "address": { "city": "Madrid" } }
Saída:
interface User {
id: number;
name: string;
age: number | null;
tags: string[];
address: Address;
}
interface Address {
city: string;
}
Mapeamento de tipos
| JSON | TypeScript |
|---|---|
| cadeia | string |
| inteiro / decimal | number |
| booleano | boolean |
| nulo sozinho | null |
| nulo + T | T | null (ou T?) |
| array de T | T[] |
| array misto | (T1 | T2)[] |
| objeto | Interface aninhada nomeada |
| array vazio | unknown[] (não pode inferir) |
Opcional vs anulável
foo?: string, o campo pode estar ausente do objeto. A verificação deundefinedse aplica.foo: string | null, o campo está sempre presente mas pode ser explicitamente nulo.foo?: string | null, pode estar ausente OU nulo.
O JSON em si não tem undefined, mas as APIs variam em como sinalizam a ausência. Combine com a semântica da sua API:
- APIs REST geralmente omitem campos ausentes ->
?:. - GraphQL sempre retorna todos os campos solicitados ->
| null. - Alguns SDKs usam ambos em diferentes contextos.
Tipos de união vs literais
Se a ferramenta vê o mesmo campo de string com um pequeno conjunto de valores em amostras ("status": "pending", "active", "archived"), ela pode emitir uma união literal de string:
status: "pending" | "active" | "archived";
Ative “inferir uniões literais de string” se você quiser isso.
Erros comuns
- Inferindo de uma amostra. Cada campo se torna obrigatório; a nulidade não pode ser observada. Passe de 5 a 10 amostras variadas para melhores tipos.
- Arrays vazios.
"tags": []não fornece informações de tipo, o gerador emiteunknown[]. Forneça uma amostra com pelo menos um elemento. - Arrays de tipos mistos.
[1, "two", true]produz(number | string | boolean)[]. Normalmente isso significa que o JSON deve ser redesenhado em vez de tipado. - Chaves de string numéricas. JSON
{"1": "a", "2": "b"}ainda é um objeto em TypeScript (Record<string, string>), não um array. O gerador lida com isso corretamente.
Perguntas frequentes
Combine com sua API. APIs REST que descartam campos nulos querem ?:. GraphQL, que sempre retorna todos os campos selecionados, quer | null. Quando em dúvida, T | null com sintaxe obrigatória é mais rigoroso e captura mais erros em tempo de compilação.
Sim, se você ativar e fornecer várias amostras. Um campo observado com 2-5 valores de string distintos em amostras é emitido como uma união literal. Além desse limite, ele volta a string.
interface para a maioria dos casos, é aberto à extensão e o TypeScript o otimiza melhor. Aliases type são úteis para uniões, interseções, tuplas e tipos mapeados. Para tipos derivados de JSON, ambos funcionam; escolha uma convenção de projeto.
Sim. Cada objeto aninhado se torna sua própria interface, com nomes derivados da chave (user.address -> Address). Para estruturas muito profundas ou repetitivas, considere um JSON Schema e um gerador dedicado de schema para TS.
Ferramentas relacionadas
Referência da Tabela ASCII
Tabela ASCII completa de 0 a 127 com valores decimais, hexadecimais, octais e binários e notação de referência numérica HTML, incluindo NUL, LF e DEL.
Referência de Caracteres HTML
Lista pesquisável de entidades HTML, seus códigos nomeados e numéricos, e uma cópia com um clique para caracteres e símbolos especiais.
Referência de atalhos de teclado
Pesquise atalhos padrão documentados do VS Code, Chrome e Bash com GNU Readline no macOS, Windows e Linux.
Gerador de EditorConfig
Gere um arquivo .editorconfig com suas regras de estilo e tamanho de indentação, fim de linha, charset e espaços em branco para formatação consistente entre IDEs e editores.
Validador de Email
Valide um endereço de email: verificação de sintaxe RFC 5322, consulta de registro MX em tempo real, além de detalhes de parte local, domínio e comprimento. Nenhum email é enviado.
Formatador de HTML
Formate HTML localmente no navegador com indentação de dois ou quatro espaços. O HTML não é enviado nem validado.
Ferramenta disponível em outros idiomas
- JSON till TypeScript [SV]
- JSON vers TypeScript [FR]
- JSON naar TypeScript [NL]
- JSON เป็น TypeScript [TH]
- JSON sang TypeScript [VI]
- تحويل JSON إلى TypeScript [AR]
- JSON ke TypeScript [ID]
- JSON a TypeScript [ES]
- JSONからTypeScriptへ [JA]
- JSON에서 TypeScript로 [KO]
- JSON zu TypeScript [DE]
- JSON do TypeScript [PL]
- JSON в TypeScript [RU]
- JSON'dan TypeScript'e [TR]
- JSON 转 TypeScript [ZH]
- JSON to TypeScript [EN]
- JSON a TypeScript [IT]