Convertir JSON a tipos de Sarcastic — Numio
Genera validadores para la librería de comprobación de tipos en runtime sarcastic a partir de una muestra JSON. Los objetos pasan a is.shape({...}), los arrays a is.arrayOf(...) y las claves que faltan en algunos elementos de un array se envuelven en is.maybe(...).
Comprobar en runtime la forma del JSON obtenido en un proyecto JavaScript pequeño sin librería de esquemas.
JSON
Sarcastic
Cuándo usarla
- Comprobar en runtime la forma del JSON obtenido en un proyecto JavaScript pequeño sin librería de esquemas.
- Proteger payloads de configuración o de mensajes con aserciones que lanzan un error ante datos inesperados.
Cómo usarla
- Pega un objeto JSON; para marcar campos como opcionales, incluye elementos de array con y sin ellos.
- Revisa la salida: la forma raíz es RootInterface y las formas anidadas toman el nombre de su clave (posts pasa a Posts).
- Copia el código y valida los datos con is(data, RootInterface), que devuelve el valor o lanza un error si no coincide.
Entrada JSON
{
"id": 1,
"name": "Ada",
"nickname": null,
"tags": ["math"],
"posts": [
{ "title": "Notes", "draft": true },
{ "title": "Engine" }
]
}Validadores de 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),
})Detalles y limitaciones
Lo genera en el navegador el generador propio del sitio, que añade import is from "sarcastic" y aplica el formato de Prettier; no hay peticiones al servidor.
sarcastic no tiene una aserción "any", así que un valor que solo es null pasa a is.maybe(anyValue), usando un pequeño helper const anyValue = (value) => value que se añade a la salida.
Tanto los enteros como los decimales son is.number. Los arrays vacíos pasan a is.array; los arrays mixtos usan is.either, como is.arrayOf(is.either(is.number, is.string)).
Las formas se declaran antes de las formas que las usan, así que el código funciona tal cual se pega.
FAQ
¿Cómo se representan los campos opcionales?
Las claves que faltan en algunos objetos de un mismo array, o que son null en algunos, se envuelven en is.maybe(...), que acepta null y undefined. Las claves de nivel superior de un único objeto son siempre obligatorias.
¿Qué pasa con un array en la raíz?
Los elementos se fusionan en una única forma RootInterface que describe un elemento, y se añade const RootInterfaceList = is.arrayOf(RootInterface) para el array completo.
¿sarcastic es lo mismo que io-ts o Zod?
No. sarcastic es una librería más pequeña sin inferencia de tipos estáticos. Si también necesitas tipos de TypeScript, las páginas JSON a Zod o JSON a io-ts se ajustan mejor.