Vai al contenuto

Tipi Sarcastic da JSON — Numio

Genera validatori per la libreria di controllo del tipo di runtime sarcastico da un esempio JSON. Gli oggetti diventano is.shape({...}), gli array is.arrayOf(...) e le chiavi mancanti in alcuni elementi dell'array vengono racchiuse in is.maybe(...).

Controllo della forma del JSON recuperato in fase di esecuzione in un piccolo progetto JavaScript senza una libreria di schemi.

JSON

Sarcastic

Quando usarlo

  • Controllo della forma del JSON recuperato in fase di esecuzione in un piccolo progetto JavaScript senza una libreria di schemi.
  • Proteggere i payload di configurazione o di messaggi con asserzioni che generano dati imprevisti.

Come si usa

  1. Incolla un oggetto JSON; per contrassegnare i campi come facoltativi, includere elementi dell'array con e senza di essi.
  2. Leggi l'output: la forma della radice è RootInterface, le forme nidificate prendono il nome dalle loro chiavi (i post diventano Post).
  3. Copia il codice e convalida i dati con is(data, RootInterface), che restituisce il valore o genera una mancata corrispondenza.

Ingresso JSON

{
  "id": 1,
  "name": "Ada",
  "nickname": null,
  "tags": ["math"],
  "posts": [
    { "title": "Notes", "draft": true },
    { "title": "Engine" }
  ]
}

Validatori sarcastici

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),
})

Dettagli e limiti

Generato nel browser dal generatore del sito, con l’aggiunta di import is from "sarcastic" e formattazione Prettier; non vengono fatte richieste a un server.

sarcastic non ha un’asserzione "any", quindi un valore che è soltanto null diventa is.maybe(anyValue), usando la piccola funzione ausiliaria const anyValue = (value) => value aggiunta all’output.

Sia gli interi che i decimali sono is.number. Gli array vuoti diventano is.array; gli array misti utilizzano is.either, ad esempio is.arrayOf(is.either(is.number, is.string)).

Le forme vengono dichiarate prima delle forme che le utilizzano, quindi il codice viene eseguito come incollato.

FAQ

Come vengono rappresentati i campi facoltativi?

Le chiavi mancanti in alcuni oggetti dello stesso array, oppure null in alcuni di essi, vengono racchiuse in is.maybe(...), che accetta null e undefined. Le chiavi al primo livello di un singolo oggetto sono sempre obbligatorie.

Cosa succede con un array root?

Gli elementi vengono uniti in un'unica forma RootInterface che descrive un singolo elemento e const RootInterfaceList = is.arrayOf(RootInterface) viene aggiunto per l'intero array.

Il sarcasmo è uguale a io-ts o Zod?

No. sarcastic è una libreria più piccola senza inferenza di tipo statico. Se hai bisogno anche dei tipi TypeScript, le pagine da JSON a Zod o da JSON a io-ts sono più vicine.

Specifiche e riferimenti