Przejdź do treści

Konwertuj JSON na typy io-ts — Numio

Generuje kodeki środowiska wykonawczego io-ts na podstawie próbki JSON, poprzedzone importem * as t z „io-ts”. Zagnieżdżone obiekty stają się własnymi kodekami, zadeklarowanymi przed kodekami, które ich używają; Brakujące klucze w niektórych elementach tablicy trafiają do t.partial.

Sprawdzanie poprawności odpowiedzi API w czasie wykonywania w aplikacji TypeScript zbudowanej na fp-ts i io-ts.

JSON

IO TS

Kiedy go używać

  • Sprawdzanie poprawności odpowiedzi API w czasie wykonywania w aplikacji TypeScript zbudowanej na fp-ts i io-ts.
  • Tworzenie kodeków dla pliku konfiguracyjnego JSON, które należy sprawdzić przed użyciem.

Jak używać

  1. Wklej obiekt JSON; zawierać kilka elementów tablicy, jeśli niektóre klucze są opcjonalne.
  2. Przeczytaj wygenerowane kodeki: katalog główny to RootInterface, a zagnieżdżone mają nazwy odpowiadające ich kluczom (ustawienia stają się Ustawieniami).
  3. Skopiuj kod, wyeksportuj potrzebne kodeki i uzyskaj typy za pomocą t.TypeOf.

Wejście JSON

{
  "id": "u_1",
  "name": "Ada",
  "age": 36,
  "nickname": null,
  "settings": { "theme": "dark", "fontSize": 14 },
  "posts": [
    { "title": "Notes", "draft": true },
    { "title": "Engine" }
  ]
}

kodeki io-ts

import * as t from "io-ts"

const Settings = t.type({
  theme: t.string,
  fontSize: t.number,
})

const Posts = t.intersection([
  t.type({
    title: t.string,
  }),
  t.partial({
    draft: t.boolean,
  }),
])

const RootInterface = t.type({
  id: t.string,
  name: t.string,
  age: t.number,
  nickname: t.null,
  settings: Settings,
  posts: t.array(Posts),
})

Szczegóły i ograniczenia

Wygenerowane w przeglądarce przez własny generator witryny i sformatowane w Prettier; strona nie ma żadnych ustawień i nie wysyła żadnych żądań do serwera.

Kodeki są emitowane z zależnościami na początku, więc każda deklaracja const istnieje, zanim RootInterface się do niej odwoła.

Liczby stają się t.number (zarówno całkowite, jak i dziesiętne). null daje t.null albo t.union([X, t.null]), gdy inne próbki zawierają wartość; puste tablice dają t.array(t.unknown).

Brakujące klucze w niektórych elementach tablicy trafiają do t.partial, łączone z wymaganymi kluczami poprzez t.intersection.

FAQ

Czy tworzy również typy TypeScript?

Nie bezpośrednio. Dodaj typ Root = t.TypeOf<typeof RootInterface>, aby wyprowadzić typ statyczny z każdego kodeka.

W jaki sposób obsługiwane są pola opcjonalne lub dopuszczające wartość null?

Brakujący klucz w niektórych elementach tablicy jest umieszczany w t.partial; klucz, który w niektórych elementach ma wartość null, staje się t.union([typ, t.null]). Zawsze wymagane są klucze najwyższego poziomu pojedynczego obiektu.

Co się dzieje z tablicą JSON w katalogu głównym?

Elementy są łączone w jeden kodek RootInterface dla kształtu elementu, a dla całej tablicy dodawana jest const RootInterfaceList = t.array(RootInterface).

Specyfikacje i referencje