Gere tipos TypeScript a partir de exemplos JSON completos
Infira tipos TypeScript de documentos JSON completos, preserve chaves literais e diferencie campos ausentes de null localmente.
Espaço de trabalho da ferramenta
JSON para TypeScript
Declarações exportadas de tipos TypeScript.
Os tipos descrevem os exemplos; não validam dados em runtime. Números JavaScript podem aproximar inteiros grandes.
Ative JavaScript para gerar código. Você pode ler e editar o JSON.
Este navegador não consegue iniciar o Worker local. A geração está indisponível.
Todos os elementos e documentos contribuem para o mesmo contrato. Um array na raiz continua sendo um array. Ausência de campo é diferente de null.
Até 20 documentos, 1.000.000 de unidades UTF-16 de entrada e 2.000.000 de saída; outros limites de recursos também se aplicam.
Seu JSON é processado localmente em um Worker do navegador. Não é enviado nem armazenado.
Ao mudar para um documento, apenas o exemplo ativo será mantido. Confirme ou cancele.
Use entre 1 e 64 letras e dígitos ASCII, começando por uma letra. Nomes reservados são rejeitados.
Pronto para inserir JSON.
Alguns detalhes de diagnóstico foram omitidos. Os totais de avisos continuam visíveis.
Detalhes dos nomes
A área de transferência está indisponível ou a permissão foi negada. Baixe o arquivo ou abra explicitamente o código completo para copiar. Um arquivo grande pode demorar para aparecer.
Um documento ou vários exemplos completos
Cole JSON estrito ou carregue um arquivo local UTF-8. Escolha um documento ou adicione até vinte documentos completos do mesmo contrato. Todos devem ser válidos; exemplos vazios, chaves duplicadas, comentários e documentos concatenados interrompem a operação. Gere por ação explícita. Todos os elementos contribuem, incluindo os últimos de um array. Um array na raiz continua sendo um array.
O editor mostra o exemplo ativo e o total. Após gerar, confira o nome do arquivo, a expressão do tipo raiz, a quantidade de nós JSON e o tamanho do código completo. Esses dados descrevem o resultado atual; copiar e baixar incluem todo o arquivo mesmo quando a prévia está limitada.
[{"id":1},{"id":2,"nombre":"Ana"}]
export type RootItem = {
"id": number;
"nombre"?: string;
};
export type Root = Array<RootItem>;
Ausência, null e chaves literais
? indica ausência observada entre objetos do mesmo contexto. Null é outro tipo: [{"x":null},{"x":"a"},{}] produz um campo opcional null | string. Presença observada não comprova uma regra da API. Objetos em propriedades diferentes mantêm contextos próprios. Toda chave usa um literal entre aspas: class, __proto__, chaves vazias, aspas e Unicode são preservados. Apenas nomes de tipos de código são ajustados para colisões.
Arrays mistos preservam todos os ramos. [] produz Array<unknown> com aviso; {} usa Record<string, unknown> por falta de campos observados. Não há inferência de datas, enums, tuples, discriminantes, validadores runtime ou lógica de negócio. As declarações exportadas aceitam strict e exactOptionalPropertyTypes do TypeScript; não validam dados em runtime.
Números, limites e exportação completa
Números continuam sendo number. A evidência usa lexemas originais; avisos de precisão JavaScript permanecem visíveis. O destino avisa quando inteiros grandes ou perda de precisão podem causar aproximação. Nunca altera números silenciosamente para strings ou bigint.
O perfil permite 20 exemplos, 1.000.000 de unidades UTF-16 de entrada, 4.000.000 de bytes UTF-8 de entrada e por arquivo, profundidade 200 e 100.000 nós de origem agregados. A análise tem 1.000.000 de unidades de trabalho compartilhadas; a inferência tem 100.000 visitas, 10.000 tipos, 20.000 campos distintos e 2.000.000 de unidades de fusão. A emissão permite 2.000 declarações e 4.000.000 de unidades de trabalho. A saída aceita 2.000.000 de unidades UTF-16 e 8.000.000 de bytes. Os máximos nem sempre podem ser atingidos juntos. A geração expira após 15 segundos e falhas não publicam código parcial.
A prévia mostra até 20.000 unidades UTF-16. Copiar e baixar exportam o types.ts completo e atual, como text/plain;charset=utf-8, UTF-8 sem BOM, LF e uma quebra final. São mostrados até 100 diagnósticos e 50 linhas de nomes com 10.000 unidades agregadas, indicando omissões. Se a área de transferência for negada, abra explicitamente o código completo para copiar. Um BOM inicial é removido para análise; posições referem-se ao texto original visível. Cancelar termina o Worker e preserva a entrada. Editar exemplos, ordem, modo ou nome raiz invalida a saída e as ações.
O processamento é local em um Worker do navegador, sem envios, armazenamento, compiladores remotos ou dados nos links. JavaScript e Worker local são necessários. A página nunca compila nem executa o código gerado.