Gerar tipos Sarcastic a partir de JSON — Numio
Gera validadores para a biblioteca de verificação de tipos em runtime sarcastic a partir de uma amostra JSON. Objetos viram is.shape({...}), arrays is.arrayOf(...), e chaves ausentes em alguns itens de um array ficam envolvidas em is.maybe(...).
Verificar em runtime o formato do JSON recebido em um projeto JavaScript pequeno sem biblioteca de esquemas.
JSON
Sarcastic
Quando usar
- Verificar em runtime o formato do JSON recebido em um projeto JavaScript pequeno sem biblioteca de esquemas.
- Proteger payloads de configuração ou de mensagens com asserções que lançam erro diante de dados inesperados.
Como usar
- Cole um objeto JSON; para marcar campos como opcionais, inclua itens de array com e sem eles.
- Confira a saída: o shape raiz é RootInterface, e os shapes aninhados recebem o nome da chave (posts vira Posts).
- Copie o código e valide os dados com is(data, RootInterface), que retorna o valor ou lança um erro se não corresponder.
Entrada JSON
{
"id": 1,
"name": "Ada",
"nickname": null,
"tags": ["math"],
"posts": [
{ "title": "Notes", "draft": true },
{ "title": "Engine" }
]
}Validadores sarcastic
import is from "sarcastic"
const anyValue = (value) => value
const Posts = is.shape({
title: is.string,
draft: is.maybe(is.boolean),
})
const RootInterface = is.shape({
id: is.number,
name: is.string,
nickname: is.maybe(anyValue),
tags: is.arrayOf(is.string),
posts: is.arrayOf(Posts),
})Detalhes e limitações
Gerado no navegador pelo gerador próprio do site, com import is from "sarcastic" adicionado e formatação do Prettier aplicada; não há requisições ao servidor.
O sarcastic não tem uma asserção "any", então um valor que é sempre null vira is.maybe(anyValue), usando um pequeno helper const anyValue = (value) => value adicionado à saída.
Inteiros e decimais são ambos is.number. Arrays vazios viram is.array; arrays mistos usam is.either, como is.arrayOf(is.either(is.number, is.string)).
Os shapes são declarados antes dos shapes que os usam, então o código roda do jeito que foi colado.
FAQ
Como os campos opcionais são representados?
Chaves ausentes em alguns objetos do mesmo array, ou null em alguns deles, ficam envolvidas em is.maybe(...), que aceita null e undefined. Chaves de nível superior de um único objeto são sempre obrigatórias.
O que acontece com um array na raiz?
Os itens são mesclados em um único shape RootInterface que descreve um elemento, e const RootInterfaceList = is.arrayOf(RootInterface) é adicionado para o array inteiro.
O sarcastic é a mesma coisa que io-ts ou Zod?
Não. O sarcastic é uma biblioteca menor, sem inferência de tipos estáticos. Se você também precisa de tipos TypeScript, as páginas JSON para Zod ou JSON para io-ts atendem melhor.