Gerador de Interfaces TypeScript a partir de JSON

Cole um exemplo de JSON, como a resposta de uma API ou um arquivo de configuração, e receba interfaces TypeScript prontas para uso, com tipos aninhados, propriedades opcionais e union types.

Atualizado em
Declarar como
Arrays

Seus dados nunca saem do seu computador. Todo o processamento acontece localmente no navegador.

Como usar: JSON para TypeScript

  1. Cole um exemplo representativo de JSON, por exemplo uma resposta copiada da aba Network do seu navegador.
  2. Defina o nome do tipo raiz (por exemplo User ou ApiResponse).
  3. Escolha interface ou type, a sintaxe dos arrays e se quer usar export ou marcar as propriedades como readonly.
  4. Copie o código gerado para um arquivo .ts ou baixe o arquivo.

O que faz um conversor de JSON para TypeScript?

Ele infere tipos estáticos a partir de dados de exemplo. Em vez de escrever à mão uma interface para cada resposta de API, você cola uma resposta real e recebe as declarações TypeScript correspondentes: uma interface nomeada para cada objeto aninhado, arrays tipados e unions onde os valores variam. É a forma mais rápida de ter autocomplete e verificação em tempo de compilação para dados recebidos de uma API REST, de um webhook ou de um arquivo de configuração JSON.

Como os tipos são inferidos

Valor JSONTipo TypeScript
"texto"string
42, 3.14number
trueboolean
nullnull (combinado com outros tipos, por exemplo string | null)
{ … }Uma interface nomeada (chave profile → Profile)
["a", "b"]string[]
[1, "dois"](number | string)[]
[]unknown[] (sem exemplo para inferir)

Arrays de objetos são mesclados

Quando um array contém vários objetos, o gerador os mescla em uma única interface, em vez de usar apenas o primeiro item. Uma chave que aparece em alguns itens, mas não em todos, vira opcional (archived?: boolean), e uma chave cujos valores variam entre os itens recebe um union type (license: string | null). As interfaces dos itens de array recebem o nome da chave no singular: repos → Repo, categories → Category. Formatos idênticos encontrados em lugares diferentes são declarados uma única vez e reutilizados.

interface ou type

Para formatos de objeto, as duas opções são quase intercambiáveis. Declarações interface podem ser estendidas com extends e mescladas ao serem declaradas novamente, além de geralmente gerarem mensagens de erro mais claras. Já os aliases type expressam unions, tuplas e mapped types. Muitos times usam interfaces para modelos de dados. Escolha a que combina com as regras do seu linter (por exemplo @typescript-eslint/consistent-type-definitions).

Limites da inferência: revise o resultado

Um exemplo mostra apenas o que estava lá. Um campo que é null no seu exemplo será tipado como null; ajuste para o tipo real (por exemplo string | null). Datas chegam como strings ISO e são tipadas como string, já que o JSON não tem tipo de data. Chaves que não são identificadores válidos, como social-links, são colocadas entre aspas automaticamente. Para validar em tempo de execução dados não confiáveis, combine esses tipos com um validador de schema, como o Zod. Organize seu exemplo antes com o JSON Formatter, ou converta configurações YAML com YAML para JSON antes de gerar os tipos.

Também pesquisado como: json para ts, json para interface typescript, gerador de interface typescript, json2ts, json para type typescript, gerar tipos a partir de json.

Ferramentas que combinam com: JSON para TypeScript

  • CSV para JSON — Cole um CSV ou TSV e receba um array JSON de objetos.
  • Conversor de SVG para JSX — Cole um SVG do Figma, do Illustrator ou de um conjunto de ícones e receba um componente React (JSX ou TSX) pronto para usar, com uma prévia segura do ícone.
  • Conversor cURL — Cole um comando curl, da documentação de uma API ou da opção “Copiar como cURL” do DevTools do seu navegador, e receba código pronto para usar em seis linguagens, com headers, corpo e autenticação preservados.
  • Validador JSON Schema — Cole um schema e um JSON para ver exatamente quais valores quebram cada regra, ou gere um schema inicial a partir de dados de exemplo.

Perguntas frequentes

Devo usar interface ou type para dados JSON?
As duas funcionam para formatos simples de objeto. Interfaces suportam declaration merging e extends; já os aliases de type também cobrem unions e mapped types. Escolha a que o guia de estilo do seu projeto prefere. O seletor muda a saída inteira.
Como as propriedades opcionais são detectadas?
Em arrays de objetos, uma propriedade que está ausente em pelo menos um item é marcada como opcional com ?. Você também pode tornar opcionais todas as propriedades nulas com a caixa de seleção abaixo da saída.
Por que uma propriedade está tipada como null?
Porque ela era null em todos os exemplos em que aparecia, então não há informação sobre o tipo real. Substitua null pelo tipo esperado, por exemplo string | null, ou cole um exemplo em que o valor esteja preenchido.
Ele lida com JSON muito aninhado?
Sim. Cada objeto aninhado vira sua própria interface nomeada, referenciada pelo pai, e formatos idênticos são declarados apenas uma vez.
Meu JSON é enviado para algum servidor?
Não. A geração de tipos acontece inteiramente no seu navegador, então você pode colar respostas de APIs internas com segurança.
Posso instalar o JSON para TypeScript como um aplicativo da web e usá-lo offline?
Sim. O JSON para TypeScript é um aplicativo da web instalável (PWA) — instalado a partir do seu navegador, não baixado de uma loja de aplicativos. Clique em “Instalar aplicativo” na parte superior desta página no Chrome ou no Edge (Windows, macOS, Linux, ChromeOS) ou, no Android, use “Compartilhar” → “Adicionar à tela inicial” no iPhone e no iPad, ou “Arquivo” → “Adicionar ao Dock” no Safari 17+ em um Mac. Em seguida, ela se abre em uma janela própria com seu próprio ícone e, como é executada inteiramente no seu navegador, continua funcionando offline. O Firefox no desktop não permite a instalação de aplicativos da web. Como funciona a instalação.

Ferramentas relacionadas