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ć
- Wklej obiekt JSON; zawierać kilka elementów tablicy, jeśli niektóre klucze są opcjonalne.
- Przeczytaj wygenerowane kodeki: katalog główny to RootInterface, a zagnieżdżone mają nazwy odpowiadające ich kluczom (ustawienia stają się Ustawieniami).
- 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).