JSON in Sarcastic-Typen umwandeln — Numio
Erzeugt aus einem JSON-Beispiel Validatoren für die Laufzeit-Typprüfungsbibliothek sarcastic. Objekte werden zu is.shape({...}), Arrays zu is.arrayOf(...), und Schlüssel, die in einigen Array-Elementen fehlen, werden in is.maybe(...) eingeschlossen.
Die Form von abgerufenem JSON zur Laufzeit in einem kleinen JavaScript-Projekt ohne Schema-Bibliothek prüfen.
JSON
Sarcastic
Wann sie hilft
- Die Form von abgerufenem JSON zur Laufzeit in einem kleinen JavaScript-Projekt ohne Schema-Bibliothek prüfen.
- Konfigurations- oder Nachrichten-Payloads mit Assertions absichern, die bei unerwarteten Daten einen Fehler werfen.
Anwendung
- Füge ein JSON-Objekt ein; um Felder als optional zu markieren, nimm Array-Elemente mit und ohne diese Felder auf.
- Lies die Ausgabe: Die Root-Shape heißt RootInterface, verschachtelte Shapes werden nach ihren Schlüsseln benannt (posts wird zu Posts).
- Kopiere den Code und validiere Daten mit is(data, RootInterface), das den Wert zurückgibt oder bei einer Abweichung einen Fehler wirft.
JSON-Eingabe
{
"id": 1,
"name": "Ada",
"nickname": null,
"tags": ["math"],
"posts": [
{ "title": "Notes", "draft": true },
{ "title": "Engine" }
]
}Sarcastic-Validatoren
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),
})Details und Einschränkungen
Wird im Browser vom eigenen Generator der Seite erzeugt, mit hinzugefügtem import is from "sarcastic" und Prettier-Formatierung; keine Serveranfrage.
sarcastic hat keine "any"-Assertion, daher wird ein Wert, der nur null ist, zu is.maybe(anyValue) und nutzt einen kleinen Helfer const anyValue = (value) => value, der der Ausgabe hinzugefügt wird.
Ganze und Dezimalzahlen sind beide is.number. Leere Arrays werden zu is.array; gemischte Arrays verwenden is.either, etwa is.arrayOf(is.either(is.number, is.string)).
Shapes werden vor den Shapes deklariert, die sie verwenden, sodass der Code so wie eingefügt läuft.
FAQ
Wie werden optionale Felder dargestellt?
Schlüssel, die in einigen Objekten desselben Arrays fehlen oder dort null sind, werden in is.maybe(...) eingeschlossen, das null und undefined akzeptiert. Schlüssel auf oberster Ebene eines einzelnen Objekts sind immer Pflicht.
Was passiert mit einem Root-Array?
Die Elemente werden zu einer RootInterface-Shape zusammengeführt, die ein einzelnes Element beschreibt, und const RootInterfaceList = is.arrayOf(RootInterface) wird für das gesamte Array ergänzt.
Ist sarcastic dasselbe wie io-ts oder Zod?
Nein. sarcastic ist eine kleinere Bibliothek ohne statische Typinferenz. Wenn du auch TypeScript-Typen brauchst, passen die Seiten JSON to Zod oder JSON to io-ts besser.