Como usar
- Cole o JSON na caixa de entrada, abra um arquivo .json ou teste o exemplo.
- Defina o nome do tipo raiz, por exemplo Order ou ApiResponse.
- Escolha entre declarações de interface ou type e se deve adicionar export e readonly.
- Copie o TypeScript gerado ou baixe-o como types.ts.
Como funciona
O gerador percorre todo o documento JSON e registra os tipos de valor encontrados em cada ponto. Cada objeto JSON se torna uma declaração nomeada própria. O nome vem da chave da propriedade escrita em PascalCase; assim, “shipping_address” se torna ShippingAddress. Os itens de um array são nomeados a partir do singular da chave: “items” gera Item, “categories” gera Category, e chaves que não parecem plurais recebem o sufixo “Item”.
Todos os objetos dentro de um mesmo array são mesclados em uma interface. Se uma chave aparecer em apenas alguns deles, ela é marcada como opcional com “?”. Se um valor tiver tipos diferentes em lugares diferentes, o tipo é uma união como string | number. null é mantido como tipo próprio; assim, um campo que às vezes é null se torna string | null. Um array vazio se torna unknown[], porque não há nada a inferir. Dois objetos com exatamente as mesmas propriedades e tipos compartilham uma interface em vez de gerar duplicatas. Chaves que não são identificadores válidos, como “first-name”, são colocadas entre aspas.
O resultado descreve apenas o exemplo que você colar. Um campo que é opcional ou pode ser null na realidade será obrigatório e não nulo se o seu exemplo não mostrar isso, e datas aparecem como strings simples. Revise os tipos comparando com a documentação da sua API antes de confiar neles.
Exemplos
Tipando uma resposta de API
Cole um pedido da API da sua loja com o nome raiz Order. Você obtém as interfaces Order, Customer, Item e Shipping, com note?: string em Item porque apenas um dos dois itens tem uma nota.
Configuração somente leitura
Cole um config.json, marque “Tornar propriedades somente leitura” e cole o resultado em config.d.ts; assim, gravações acidentais na configuração são detectadas pelo compilador.
Array no nível superior
Um endpoint de lista retorna [{…}, {…}]. Com o nome raiz Product, a saída começa com “export type Product = ProductItem[];” seguida da interface ProductItem.
Perguntas frequentes
Por que um campo fica opcional na saída?
Porque pelo menos um objeto no mesmo array não tem essa chave. Se todos os objetos a tiverem, ela é obrigatória. Cole vários registros para obter campos opcionais mais precisos.
Por que uma data é tipada como string?
O JSON não tem tipo de data, então as datas são representadas como strings. O gerador não adivinha formatos. Altere o tipo manualmente se o seu código converter as datas em objetos Date.
Qual é a diferença entre interface e type?
Para formatos de objeto, eles funcionam quase da mesma forma. Interfaces podem ser estendidas e mescladas por declarações posteriores; type aliases não podem ser reabertos. Escolha o estilo que seu código já usa.
Ele consegue gerar validação em tempo de execução, como esquemas Zod?
Não. Ele gera apenas declarações TypeScript, que são verificadas em tempo de compilação e não validam os dados em tempo de execução.
Privacidade
Seu JSON é analisado apenas no seu navegador. Nada é enviado, armazenado ou incluído nas análises.