Tipos TypeScript a partir de JSON

Amostra JSON para interfaces TypeScript, Zod, JSON Schema, structs Go ou Python.

These options apply to TypeScript.

Output

4 named types · 28 lines

O que faz

Cole uma amostra JSON, por exemplo uma resposta copiada do painel de rede do navegador, e veja os tipos que ela implica em cinco formatos: TypeScript (interface ou type), Zod com z.infer, JSON Schema 2020-12, structs Go com tags json e dataclasses Python. Tudo roda no seu navegador, com o mesmo analisador rigoroso do formatador JSON, que mostra linha e coluna de cada erro.

Como os tipos são inferidos

Objetos viram tipos nomeados a partir da chave (items → Item, no singular para elementos de array). Os elementos de um array são mesclados em um único tipo: um campo ausente em alguns elementos fica opcional, e tipos diferentes formam uma união, então [1, "a", null] é (string | number | null)[]. Array vazio é unknown[] e objeto vazio é Record<string, unknown>. Inteiros e decimais são number no TypeScript, mas int64/float64 no Go e int/float no Python. Chaves que não são identificadores ficam entre aspas.

Limites

Uma amostra mostra só uma resposta. Um status é string, não a união dos valores permitidos; uma data é texto. Cole vários registros dentro de um array para mesclá-los e ajuste o resultado à mão. Para dados vindos da rede, o esquema Zod valida em tempo de execução.

Perguntas frequentes

Por que um campo é null e não string | null?

Porque em todas as amostras ele era null. Adicione um registro com valor, no mesmo array, e eles serão mesclados como string | null.

Meu JSON é enviado para algum servidor?

Não. A análise e a geração de código acontecem no seu navegador.

Por que a chave date vira DateType?

Uma interface chamada Date se fundiria com o tipo Date nativo. Nomes nativos recebem o sufixo Type para evitar isso.