Was dieses Werkzeug tut
Aus einer JSON-Probe werden io-ts-Codecs, ein const je Objekt.
{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
import * as t from "io-ts";
export const Address = t.type({
city: t.string,
});
export const Root = t.type({
id: t.Int,
name: t.string,
address: Address,
});
Die Kinder werden zuerst deklariert: Codecs sind Laufzeitwerte, einer muss da sein, bevor ein anderer ihn nennt. Ein Array an der Wurzel bekommt seinen eigenen Codec — export const Users = t.array(UsersItem); — statt ihn Ihnen zu überlassen.
t.Int ist markiert, und das merkt man
t.Int ist eine Verfeinerung von t.number mit dem Nachweis der Ganzzahligkeit. t.TypeOf<typeof Root> ergibt daher { id: Int; … }, nicht { id: number; … }. Ein Int passt überall dorthin, wo ein number erwartet wird; umgekehrt braucht es ein decode. Ist Ihnen diese Reibung die Ganzzahlprüfung nicht wert, ist t.number ein Ersatz von einem Wort.
Welchen der beiden Sie bekommen, hängt an der Schreibweise: 3 ergibt t.Int, 10.0 ergibt t.number. Bis vor kurzem ergab auch 10.0 ein t.Int, und der Codec wies dann 10.5 ab — den nächsten Datensatz. Ein echter Fehler, beim Schreiben dieser Seiten gefunden und behoben.
Was ein Codec durchlässt
t.type prüft, was es kennt, und übergeht den Rest. Eine Antwort mit drei zusätzlichen Feldern dekodiert sauber. Das ist die Interface-Semantik von io-ts und die richtige Vorgabe, um fremde APIs zu lesen — soll ein unerwarteter Schlüssel ein Fehler sein, hüllen Sie dieselbe Form in t.strict, oder in t.exact, um ihn zu entfernen.
Dekodieren, in einer Zeile
import { isRight } from "fp-ts/Either";
const result = Root.decode(payload);
if (isRight(result)) { /* result.right ist typisiert */ }
PathReporter.report(result) macht aus einem Fehlschlag lesbare Pfade — nützlich beim ersten Mal, wenn ein Codec eine Nutzlast ablehnt, die Sie für richtig hielten.
Alles ist Pflicht
Jeder Schlüssel der Probe landet in t.type, also als Pflichtfeld. io-ts schreibt Optionalität in ein eigenes t.partial, verbunden per t.intersection. Die Schlüssel auf beide Hälften zu verteilen ist eine Aussage über die API; ein Dokument kann sie nicht für Sie treffen.
Datenschutz ab Werk
Alles läuft lokal in deinem Browser mit JavaScript. Deine Daten werden nie hochgeladen, wodurch das Tool auch für sensible Inhalte sicher ist und offline funktioniert.