JSON para TypeScript
Transforme um payload de exemplo em interfaces TypeScript — objetos aninhados ganham o próprio tipo, arrays mistos viram unions, e chaves ausentes em algumas linhas saem como opcionais.
JSON
TypeScript
Sobre esta ferramenta
Tipar uma resposta de API na mão é chato e fácil de errar de um jeito sutil. Cole um payload real e as interfaces são geradas: cada objeto aninhado vira um tipo nomeado próprio, arrays de objetos são fundidos num único formato para que uma chave ausente em algumas linhas seja marcada como opcional, e arrays mistos viram unions. Formatos idênticos são emitidos uma vez e compartilhados. O que ele não consegue é adivinhar além do exemplo — um campo que está null na sua amostra é tipado como null, porque nada nos dados diz o contrário.
Como usar
- 1Cole uma resposta JSON representativa — quanto mais linhas um array tiver, melhor a detecção de opcionais.
- 2Dê nome ao tipo raiz e escolha interface ou type, conforme a sua base de código.
- 3Copie o resultado para um arquivo .d.ts e depois amplie qualquer campo que a amostra descreveu de forma estreita demais.
Perguntas frequentes
›Como os campos opcionais são decididos?
Comparando os objetos de um array. Se uma chave está em alguns elementos e falta em outros, ela é marcada como opcional; uma chave presente em todos é obrigatória. Um objeto sozinho não dá evidência nenhuma, então todas as chaves saem obrigatórias.
›Por que um campo é tipado como null em vez de string | null?
Porque null foi tudo o que a amostra mostrou. A inferência só descreve os dados que recebeu — amplie esses campos na mão, ou cole uma amostra que inclua um valor preenchido.
›Por que duas chaves diferentes compartilham uma interface?
Formatos idênticos são emitidos uma vez só e reaproveitados, o que mantém a saída curta. Renomeie a interface se forem conceitualmente tipos distintos que por acaso se parecem hoje.
›interface ou type — qual escolher?
Interfaces podem ser estendidas e fundidas por declaração, o que combina com formatos de objeto e APIs públicas. Aliases de tipo cobrem também unions e mapped types. Para formatos de payload gerados, os dois se comportam igual, então use o que a sua base de código já usa.
›Isso valida os dados em tempo de execução?
Não. Os tipos do TypeScript somem na compilação, então nada confere se uma resposta de API realmente corresponde. Se você precisa de garantias em execução, gere um schema com Zod ou Valibot e derive o tipo a partir dele.