Nouplo

JSON para tipos

Uma amostra de um lado, um tipo do outro.

Os exemplos substituem temporariamente os dados e as configurações. Você pode restaurar seu trabalho anterior.

0 caracteres
Resultado
Cole ou digite acima para ver o resultado aqui.

Seus arquivos ficam no seu dispositivo

Esta ferramenta roda inteiramente no seu navegador. O que você cola é processado no seu dispositivo e nunca é enviado a um servidor, então é seguro usar com tokens, chaves e textos não publicados.

Exemplo

Exemplo: dois pedidos de loja virtual em esquema Zod, com parcelas só no cartão

Uma loja virtual quer validar os pedidos que chegam do checkout antes de emitir a nota. Cola dois pedidos como array JSON: 5501, Ana Souza, CEP 01310-100 em São Paulo, R$ 189,90 no Pix; e 5502, Carlos Lima, CEP 30130-010 em Belo Horizonte, R$ 459,00 no cartão em 3 parcelas. Configuração: Zod, nome Pedido, recuo de 2 espaços.

  1. Como o JSON começa com um array, o esquema descreve um pedido e se chama Pedido. cliente, endereco e pagamento viram esquemas próprios (Cliente, Endereco, Pagamento), declarados antes de Pedido.
  2. parcelas só existe no pedido no cartão, então sai z.number().optional(): um pedido no Pix sem parcelas continua válido.
  3. cep e cpf estão entre aspas no JSON e ficam z.string(); assim o hífen do CEP e um zero à esquerda não se perdem.
  4. valor_total 189.9 e 459 viram z.number(). No JSON o decimal é com ponto: 189,90 com vírgula não seria JSON válido.
Campo Nos dois pedidos Esquema
id 5501, 5502z.number()
cliente nome e cpfCliente
endereco.cep "01310-100", "30130-010"z.string()
valor_total 189.9, 459z.number()
pagamento.forma "pix", "cartao"z.string()
pagamento.parcelas só no 5502: 3z.number().optional()

4 esquemas (Pagamento, Endereco, Cliente e Pedido) e o tipo Pedido via z.infer. Para validar a lista inteira, use z.array(Pedido). Vale apertar à mão: forma pode virar um z.enum com pix, cartao e boleto, e uf ter sempre 2 letras; uma amostra não mostra isso.

Como funciona

  1. Cole uma resposta real. Um registro de verdade vale mais do que um inventado.
  2. Escolha TypeScript, Go ou Zod.
  3. Dê nome ao tipo principal ou deixe Root.
  4. Copie o resultado e leia: inferir de uma amostra dá um primeiro rascunho, não uma especificação.

Perguntas frequentes

Ele olha todos os elementos do array ou só o primeiro?
Todos. [{a:1},{a:1,b:2}] deixa b opcional em vez de fingir que não existe — exatamente o erro que torna tipos gerados chatos duas semanas depois.
O que ele faz com null?
Alarga em vez de estreitar. Um campo que já foi null é um campo que pode ser null: em TypeScript vira união, em Go vira ponteiro. É quase sempre o que a API realmente faz.
Dá para confiar no resultado?
Como ponto de partida. Uma amostra não diz que um campo é um enum, que um número é inteiro ou que um texto é uma data: leia e aperte. Poupa a digitação, não o raciocínio.
Como tiro o tipo TypeScript do esquema Zod?
Já vem pronto: a última linha declara um tipo com o mesmo nome do esquema principal, feito com z.infer, então o mesmo nome serve para validar com .parse() e para tipar. Os esquemas internos vêm antes porque, no Zod, um esquema precisa ser declarado antes de ser usado.
E se o meu JSON começar com um array?
O tipo descreve um elemento só, com o nome que você digitar, e todos os elementos são lidos: um campo que falta em alguns sai opcional. No TypeScript, uma última linha acrescenta o tipo da lista, como PedidoList = Pedido[]; no Zod, valide a lista com z.array() em volta do esquema.
Alguma coisa é enviada para um servidor?
Não. Roda no navegador, então o que você colar fica no seu computador.

Ferramentas relacionadas