Przejdź do treści

Typy Sarcastic z JSON — Numio

Generuje walidatory biblioteki sarcastic do sprawdzania typów podczas wykonywania na podstawie próbki JSON. Obiekty stają się is.shape({...}), tablice is.arrayOf(...), a klucze brakujące w części elementów tablicy są otaczane is.maybe(...).

Sprawdzanie kształtu pobranego JSON w czasie wykonywania w małym projekcie JavaScript bez biblioteki schematów.

JSON

Sarcastic

Kiedy go używać

  • Sprawdzanie kształtu pobranego JSON w czasie wykonywania w małym projekcie JavaScript bez biblioteki schematów.
  • Ochrona ładunków konfiguracyjnych lub komunikatów za pomocą asercji, które generują nieoczekiwane dane.

Jak używać

  1. Wklej obiekt JSON; aby oznaczyć pola jako opcjonalne, uwzględnij elementy tablicy z nimi i bez nich.
  2. Sprawdź wynik: struktura główna to RootInterface, a struktury zagnieżdżone otrzymują nazwy od swoich kluczy (posts staje się Posts).
  3. Skopiuj kod i zweryfikuj dane za pomocą is(data, RootInterface), która zwraca wartość lub zgłasza niezgodność.

Wejście JSON

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

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

Szczegóły i ograniczenia

Generowanie odbywa się w przeglądarce przy użyciu własnego generatora witryny, który dodaje import is from "sarcastic" i formatuje wynik w Prettier; nie wysyła żądania do serwera.

sarcastic nie ma asercji "any", dlatego wartość będąca tylko null staje się is.maybe(anyValue), z użyciem małej funkcji pomocniczej const anyValue = (value) => value dodanej do wyniku.

Zarówno liczby całkowite, jak i dziesiętne to is.number. Puste tablice stają się is.array; tablice mieszane używają is.either, na przykład is.arrayOf(is.either(is.number, is.string)).

Kształty są deklarowane przed kształtami, które ich używają, więc kod działa po wklejeniu.

FAQ

Jak reprezentowane są pola opcjonalne?

Klucze brakujące w części obiektów tej samej tablicy lub mające null w części z nich są otaczane is.maybe(...), które akceptuje null i undefined. Klucze najwyższego poziomu pojedynczego obiektu są zawsze wymagane.

Co się dzieje z tablicą główną?

Elementy są łączone w jeden kształt RootInterface opisujący pojedynczy element, a dla całej tablicy dodawana jest const RootInterfaceList = is.arrayOf(RootInterface).

Czy sarcastic to to samo co io-ts lub Zod?

Nie. sarcastic to mniejsza biblioteka bez statycznego wnioskowania typów. Jeśli potrzebujesz również typów TypeScript, bardziej odpowiednie są narzędzia JSON do Zod lub JSON do io-ts.

Specyfikacje i referencje