Zum Inhalt springen

JSON in TypeScript

JSON to TypeScript

Leitet aus einem JSON-Beispiel TypeScript-Interfaces oder -Typen ab und führt optionale und Union-Felder zusammen.

Fügen Sie eine JSON-Antwort ein und erhalten Sie TypeScript-Interfaces dafür. Die Inferenz führt jeden Datensatz der Stichprobe zusammen, statt nur den ersten zu lesen, sodass ein Feld, das nur in manchen vorkommt, optional statt erforderlich herauskommt – das ist der Unterschied zwischen einem Typ, der kompiliert, und einem Typ, der stimmt.

🔒 Läuft vollständig in Ihrem Browsertypescriptjsoncodegentypes
Ausgeben als

Beispiel-JSON

Eine .json-Datei ablegen

Wird in diesem Tab gelesen. Nichts wird hochgeladen.

Geben Sie ihm jedes Element, das Sie haben. Jeder weitere Datensatz engt die Vermutung ein – ein Feld, das in einem davon fehlt, ist genau das, was es optional macht.

TypeScript

So funktioniert es

  1. Fügen Sie so viele Datensätze ein, wie Sie haben

    Jedes Element jedes Arrays wird gelesen und zusammengeführt, nicht nur das erste. Drei Datensätze sagen weit mehr als einer, denn ein Feld, das in einem davon fehlt, ist genau das, was dieses Feld optional macht.

  2. Benennen Sie den Wurzeltyp

    Verschachtelte Objekte werden nach dem Schlüssel benannt, der sie enthält, bei Arrays in die Einzahl gesetzt, sodass `users` ein `User` ergibt. Nur die Wurzel braucht einen Namen von Ihnen.

  3. Lesen Sie die Zähler unter der Ausgabe

    Typen, optionale Felder, Unions und wie viele Datensätze zusammengeführt wurden. Ein Union-Zähler über null bedeutet, dass ein Feld in Ihrer Stichprobe zwei verschiedene Arten von Wert hatte – einen Blick wert, bevor Sie das Ergebnis in eine Codebasis einfügen.

  4. Kopieren Sie die Interfaces heraus

    Die Ausgabe ist ein Satz exportierter Interfaces in Deklarationsreihenfolge, bereit zum Einfügen in eine `.d.ts` oder neben den fetch, der sie zurückgibt.

Häufige Fragen

Ist das ein Validator?

Nein. TypeScript-Typen werden beim Build entfernt, also prüft hier nichts die Antwort zur Laufzeit – ein Server, der seine Form ändert, liefert Ihnen einen Wert, der über seinen Typ lügt. Wenn die Prüfung stattfinden soll, erzeugen Sie Zod auf demselben Bildschirm und parsen Sie damit.

Warum ist ein Feld als `string` typisiert, obwohl es ein Datum ist?

Weil es in JSON ein String ist. Die Inferenz ist strukturell – sie berichtet, was die Werte sind, und rät nicht, dass ein nach ISO 8601 aussehender String ein `Date` werden sollte. Das einzuengen ist eine Entscheidung über Ihre Codebasis, nicht über die Stichprobe.

Was, wenn ein Feld mal ein String und mal eine Zahl ist?

Es wird zu einer Union, `string | number`, und der Union-Zähler unten steigt. Das ist meist ein Signal über die API und nicht über den Typ – ein Feld, das seine Art wechselt, ist ein Bug, der irgendwo stromabwärts wartet.

Werden Literaltypen aus der Stichprobe erzeugt?

Nein – ein `status`, der in drei Datensätzen immer `"active"` ist, kommt trotzdem als `string` heraus. Drei Datensätze sind kein Beleg für ein Enum, und ein aus zu wenig Daten abgeleiteter Literaltyp ist die Art von Ding, die eine Woche später einen Build bricht.

Eingabe aus

Danach

Diese Tools nehmen an, was dieses hier erzeugt, das Ergebnis kann also direkt weiter.