100 % local — seus dados nunca saem do seu navegador

JSON para TypeScript — chega de digitar tipos

Transforme uma amostra JSON em interfaces TypeScript. Os objetos aninhados ganham o próprio tipo nomeado: um payload vira um arquivo que você cola.

Instantâneo Privado Zero cookies
Estilo

Entrada JSON

Saída TypeScript

O que esta ferramenta faz

Uma amostra JSON vira tipos TypeScript, uma interface nomeada por objeto.

{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
export interface Root {
  id: number;
  name: string;
  address: Address;
}

export interface Address {
  city: string;
}

interface ou type, exportado ou não, e o nome da raiz: você ajusta.

Uma lista na raiz enfim tem nome

Um array de objetos é a amostra mais comum que existe: é o que um endpoint de lista devolve. A saída dava apenas a interface do elemento:

export interface UsersItem {
  id: number;
}

e o nome de raiz que você digitou não ia a lugar nenhum. A lista em si agora tem nome:

export type Users = UsersItem[];

export interface UsersItem {
  id: number;
}

Era um defeito, encontrado ao escrever esta página e corrigido. Os geradores Zod e io-ts deste site já emitiam sua raiz; o TypeScript, não.

Mesmo nome, forma diferente

Os nomes de tipo vêm das chaves: dois ramos podem querer Address os dois. Quando as formas diferem, a segunda vira Address2 em vez de se fundir num tipo que não serve para nenhuma. Quando as formas são idênticas, uma só definição é compartilhada — um Address referenciado duas vezes.

O que uma amostra não consegue dizer

Nada é marcado opcional, e isso é deliberado: uma chave vista uma vez diz que pode aparecer, não que apareça sempre. "nickname": null dá nickname: null, porque é tudo o que a amostra contém — amplie você mesmo para string | null quando souber.

Um identificador de vinte dígitos é tipado number, e um número JavaScript não o comporta: passado 2^53 o valor muda ao ser analisado. O tipo não mente sobre a amostra, ele herda um limite da linguagem — se o campo for um identificador floco de neve, ponha string e mantenha-o fora do JSON.parse.

Uma chave repetida é recusada

{"a": 1, "a": "x"} dava a: string, com a última ocorrência vencendo em silêncio. Dois valores, uma chave, nenhum jeito de dizer que tipo o campo tem: a conversão agora para e declara o documento ambíguo. É a mesma resposta que o validador JSON daqui já dava ao mesmo documento.

Privado por padrão

Tudo é executado localmente no seu navegador com JavaScript. Os seus dados nunca são enviados para um servidor, o que torna a ferramenta segura para conteúdo sensível e funciona offline.

Perguntas frequentes

Por que nenhum campo é opcional?
Porque um documento não consegue dizer isso. Uma chave presente prova que ela pode estar, não que esteja sempre. Marcar tudo como obrigatório é ao menos uma afirmação que uma segunda amostra verifica; inventar um `?` seria afirmar algo sobre dados que você nunca mostrou à ferramenta.
Minha lista de usuários só produziu `UsersItem`. Cadê o tipo da lista?
Já está ali. Um array na raiz dava só a interface do elemento: era preciso escrever `UsersItem[]` à mão, e o nome de raiz pedido era ignorado em silêncio. A saída agora começa com `export type Users = UsersItem[];`. Era um defeito real, encontrado ao escrever esta página.
Dois objetos diferentes se chamam ambos `Address`. O que acontece?
O segundo vira `Address2`. Os nomes vêm das chaves, e duas chaves de ramos diferentes podem levar o mesmo nome com formas diferentes. Fundi-las daria um tipo errado para as duas; o sufixo mantém cada uma honesta, e formas idênticas continuam dividindo uma definição.

Conversores relacionados