Como usar
- Cole um valor JSON típico em Exemplo JSON. Os tipos aparecem enquanto você digita.
- Digite um nome em Nome da interface raiz para o objeto mais externo, como Product.
- Desmarque Escrever export antes de cada declaração se os tipos ficarem no mesmo arquivo.
- Copie as Interfaces TypeScript, ou baixe-as como types.ts.
Como os tipos são obtidos
Cada objeto JSON vira uma interface. Seu nome vem da chave que o contém, em PascalCase: a chave first-name gera FirstName. Os itens de um array tomam o singular da chave do array, então items gera Item. Quando um nome já está em uso, o nome do pai é colocado na frente dele.
Textos, números e booleanos viram string, number e boolean. null é escrito como null em uma união, como number | null. Um array de valores vira um tipo seguido de []; um array vazio vira unknown[], porque o exemplo não diz o que ele contém.
chave "first-name" -> propriedade "first-name": string; items -> Item[]
Vários exemplos em um array
Uma lista de objetos é lida como uma forma só. Uma chave que aparece em todos os itens é obrigatória; uma chave que falta em alguns itens é escrita com ponto de interrogação, como opcional. Uma chave que guarda tipos diferentes em itens diferentes vira uma união, com string primeiro, depois number, boolean, a interface, o array e null.
Um exemplo mostra só os valores que contém. Uma chave que uma API real às vezes deixa de fora pode faltar em um único exemplo, então acrescente um segundo item com ela se precisar que o tipo a mostre como opcional.
Exemplo resolvido: o exemplo padrão
O exemplo padrão é um objeto com cinco chaves. A chave owner guarda um objeto, então o código tem uma interface Owner. A chave items é um array de dois objetos, então o código tem uma interface Item. As chaves sku e price estão nos dois itens e são obrigatórias; a chave discount é null em um item e um número no outro, então é number | null; a chave note aparece em um só item e é opcional.
O resultado tem três declarações: Root, Owner e Item, e a contagem mostra 3.
Perguntas frequentes
Por que um campo é marcado com ponto de interrogação?
O campo falta em pelo menos um objeto do exemplo. Um campo assim pode estar ausente nos dados reais, então o TypeScript o trata como opcional, e o código que o lê deve verificá-lo antes.
Por que meu campo mostra uma união como string | number?
Itens diferentes guardam tipos diferentes para essa chave. O tipo lista todos os tipos vistos no exemplo, então o código deve verificar qual deles tem antes de usar o valor.
A ferramenta verifica meus dados reais da API?
Não. Ela escreve os tipos do exemplo que você cola. Um exemplo com um item não consegue mostrar um campo que aparece só depois, então use uma resposta típica com vários itens quando puder.
Por que alguns nomes de propriedade estão entre aspas?
Um nome que não é um identificador simples, como first-name ou 2fa, precisa de aspas no TypeScript. Os nomes que são identificadores válidos são escritos sem aspas.
Posso usar a saída com JavaScript?
As interfaces são só TypeScript. Elas são removidas quando o código é compilado, então um projeto JavaScript precisa verificar o JSON de outro modo, ou usar uma etapa de build do TypeScript.
Fontes
- TypeScript Handbook (em inglês): object types, interfaces and optional properties
- RFC 8259 (em inglês): The JavaScript Object Notation (JSON) Data Interchange Format
Números e texto verificados pela última vez em terça-feira, 10 de novembro de 2026.