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.