Pular para o conteúdo

JSON para TypeScript

JSON to TypeScript

Infere interfaces ou tipos TypeScript a partir de um exemplo de JSON, mesclando campos opcionais e de união.

Cole uma resposta JSON e receba interfaces TypeScript para ela. A inferência mescla todos os registros da amostra em vez de ler o primeiro, então um campo que só aparece em alguns deles sai como opcional em vez de obrigatório — que é a diferença entre um tipo que compila e um tipo que é verdadeiro.

🔒 Roda inteiramente no seu navegadortypescriptjsoncodegentypes
Gerar

JSON de exemplo

Solte um arquivo .json

Lido nesta aba. Nada é enviado.

Dê todos os elementos que você tiver. Cada registro a mais estreita o palpite: um campo que falta em um deles é o que o torna opcional.

TypeScript

Como usar

  1. Cole todos os registros que você tiver

    Cada elemento de cada array é lido e mesclado, não só o primeiro. Três registros dizem muito mais do que um, porque um campo ausente em um deles é exatamente o que torna esse campo opcional.

  2. Dê nome ao tipo raiz

    Objetos aninhados recebem o nome da chave que os contém, no singular para arrays, então `users` produz um `User`. Só a raiz precisa de um nome seu.

  3. Leia as contagens abaixo da saída

    Tipos, campos opcionais, uniões e quantos registros foram mesclados. Uma contagem de uniões acima de zero significa que um campo teve dois tipos de valor diferentes na sua amostra — vale olhar antes de colar o resultado em uma base de código.

  4. Copie as interfaces

    A saída é um conjunto de interfaces exportadas em ordem de declaração, pronta para colar em um `.d.ts` ou ao lado do fetch que as devolve.

Perguntas frequentes

Isto é um validador?

Não. Tipos TypeScript são apagados no build, então nada aqui verifica a resposta em tempo de execução: um servidor que muda de forma vai te entregar um valor que mente sobre o próprio tipo. Se você precisa que a verificação aconteça, gere Zod na mesma tela e analise com ele.

Por que um campo sai como `string` se é uma data?

Porque em JSON ele é uma string. A inferência é estrutural: relata o que os valores são e não adivinha que uma string com cara de ISO-8601 deveria virar `Date`. Estreitar isso é uma decisão sobre a sua base de código, não sobre a amostra.

E se um campo é às vezes string e às vezes número?

Ele vira uma união, `string | number`, e a contagem de uniões lá embaixo sobe. Isso costuma ser um sinal sobre a API, mais do que sobre o tipo: um campo que muda de espécie é um bug esperando em algum lugar adiante.

Tipos literais são produzidos a partir da amostra?

Não: um `status` que é sempre `"active"` em três registros continua saindo como `string`. Três registros não são prova de uma enumeração, e um tipo literal inferido de poucos dados é o tipo de coisa que quebra um build uma semana depois.

Pode receber de

Em seguida

Estas aceitam o que esta ferramenta produz, então o resultado pode ir direto.