Générer des types Sarcastic à partir de JSON — Numio
Génère des validateurs pour la bibliothèque de vérification de types à l’exécution sarcastic à partir d’un échantillon JSON. Les objets deviennent is.shape({...}), les tableaux is.arrayOf(...), et les clés absentes de certains éléments d’un tableau sont enveloppées dans is.maybe(...).
Vérifier à l’exécution la forme du JSON récupéré dans un petit projet JavaScript sans bibliothèque de schémas.
JSON
Sarcastic
Quand l’utiliser
- Vérifier à l’exécution la forme du JSON récupéré dans un petit projet JavaScript sans bibliothèque de schémas.
- Protéger des payloads de configuration ou de messages avec des assertions qui lèvent une erreur sur des données inattendues.
Mode d’emploi
- Collez un objet JSON ; pour marquer des champs comme optionnels, incluez des éléments de tableau avec et sans eux.
- Lisez la sortie : la forme racine est RootInterface, les formes imbriquées prennent le nom de leur clé (posts devient Posts).
- Copiez le code et validez les données avec is(data, RootInterface), qui renvoie la valeur ou lève une erreur en cas de non-correspondance.
Entrée JSON
{
"id": 1,
"name": "Ada",
"nickname": null,
"tags": ["math"],
"posts": [
{ "title": "Notes", "draft": true },
{ "title": "Engine" }
]
}Validateurs 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),
})Détails et limites
Généré dans le navigateur par le générateur propre au site, avec ajout de import is from "sarcastic" et formatage Prettier ; aucune requête au serveur.
sarcastic n’a pas d’assertion « any » : une valeur toujours null devient donc is.maybe(anyValue), grâce à un petit helper const anyValue = (value) => value ajouté à la sortie.
Les entiers comme les décimaux sont is.number. Les tableaux vides deviennent is.array ; les tableaux mixtes utilisent is.either, comme is.arrayOf(is.either(is.number, is.string)).
Les formes sont déclarées avant celles qui les utilisent : le code fonctionne donc tel qu’il est collé.
FAQ
Comment les champs optionnels sont-ils représentés ?
Les clés absentes de certains objets d’un même tableau, ou null dans certains d’entre eux, sont enveloppées dans is.maybe(...), qui accepte null et undefined. Les clés de premier niveau d’un objet unique sont toujours obligatoires.
Que se passe-t-il avec un tableau racine ?
Les éléments sont fusionnés en une seule forme RootInterface décrivant un élément, et const RootInterfaceList = is.arrayOf(RootInterface) est ajouté pour le tableau entier.
sarcastic est-il équivalent à io-ts ou Zod ?
Non. sarcastic est une bibliothèque plus petite, sans inférence de types statiques. Si vous avez aussi besoin de types TypeScript, les pages JSON vers Zod ou JSON vers io-ts sont plus adaptées.