Vai al contenuto

Converti JSON in tipi io-ts — Numio

Genera codec runtime io-ts da un campione JSON, preceduto da import * as t from "io-ts". Gli oggetti nidificati diventano i propri codec, dichiarati prima dei codec che li utilizzano; le chiavi mancanti da alcuni elementi dell'array vanno in t.partial.

Convalida di una risposta API in fase di runtime in un'app TypeScript basata su fp-ts e io-ts.

JSON

IO TS

Quando usarlo

  • Convalida di una risposta API in fase di runtime in un'app TypeScript basata su fp-ts e io-ts.
  • Codec di redazione per un file di configurazione JSON che deve essere controllato prima dell'uso.

Come si usa

  1. Incolla un oggetto JSON; includere diversi elementi dell'array se alcune chiavi sono facoltative.
  2. Leggi i codec generati: la radice è RootInterface e quelli annidati prendono il nome dalle loro chiavi (le impostazioni diventano Impostazioni).
  3. Copia il codice, esporta i codec che ti servono e deriva i tipi con t.TypeOf.

Ingresso JSON

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

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

Dettagli e limiti

Generato nel browser dal generatore stesso del sito e formattato con Prettier; la pagina non ha impostazioni e non effettua richieste al server.

I codec vengono prima emessi come dipendenze, quindi ogni const viene definito prima che RootInterface vi faccia riferimento.

I numeri diventano t.number (interi e decimali allo stesso modo). null restituisce t.null o t.union([X, t.null]) quando altri campioni hanno un valore; gli array vuoti danno t.array(t.unknown).

Le chiavi mancanti in alcuni elementi di un array vanno in t.partial, combinate con le chiavi richieste tramite t.intersection.

FAQ

Crea anche tipi TypeScript?

Non direttamente. Aggiungi tipo Root = t.TypeOf<typeof RootInterface> per derivare il tipo statico da ciascun codec.

Come vengono gestiti i campi facoltativi o nullable?

Una chiave mancante in alcuni elementi dell'array viene inserita in t.partial; una chiave che è nulla in alcuni elementi diventa t.union([tipo, t.null]). Sono sempre necessarie le chiavi di livello superiore di un singolo oggetto.

Cosa succede con un array JSON alla radice?

Gli elementi vengono uniti in un codec RootInterface per la forma dell'elemento e viene aggiunto const RootInterfaceList = t.array(RootInterface) per l'intero array.

Specifiche e riferimenti