JSON zu TypeScript
Fügen Sie ein Beispiel Ihrer JSON-Daten ein und erhalten Sie passende TypeScript-Typen.
JSON zu TypeScript wird geladen… Wenn nichts passiert, aktiviere JavaScript.
TypeScript-Typen für eine API-Antwort von Hand zu schreiben ist mühsam und fehleranfällig, besonders wenn die Daten tief verschachtelt sind oder manche Felder nur ab und zu auftauchen. Fügen Sie ein echtes JSON-Beispiel in dieses Tool ein, und es leitet die Typen schon während der Eingabe ab. Jedes verschachtelte Objekt wird zu einem eigenen, benannten Interface. Der Name stammt vom Schlüssel, unter dem das Objekt steht, umgewandelt in PascalCase: Ein Schlüssel address ergibt ein Interface Address, ein Array projects ergibt ein Interface Project für seine Elemente. Objekte mit genau derselben Form werden nur einmal deklariert und wiederverwendet, und Namen, die untereinander oder mit eingebauten Typen wie Date, Response oder Location kollidieren würden, bekommen einen Zusatz, damit das Ergebnis direkt kompiliert.
Häufig gestellte Fragen
Wie werden verschachtelte Objekte zu Interfaces?
Warum ist ein Feld als optional markiert?
Kann ich JSON Lines oder mehrere Beispiele einfügen?
Was passiert mit leeren Arrays und null-Werten?
Werden Datumszeichenketten in Date umgewandelt?
Sollte ich interface oder type wählen?
Wofür ist der Reiter JSON Schema?
Wird mein JSON an einen Server gesendet?
Über JSON zu TypeScript
Je mehr Beispiele Sie liefern, desto besser werden die Typen. Fügen Sie ein Array von Datensätzen ein, mehrere JSON-Dokumente im Format JSON Lines (ein Objekt pro Zeile, wie in Logdateien und NDJSON-Exporten), oder aktivieren Sie die Option, die ein Array auf oberster Ebene als Liste von Beispielen behandelt. Das Tool führt alle Werte zusammen, die an derselben Stelle vorkommen: Ein Feld, das in manchen Objekten fehlt, wird optional, ein Feld, das manchmal null ist, bekommt | null (oder wird optional, wenn Ihnen dieser Stil lieber ist), ein Wert, der mal Text und mal Zahl ist, wird zu einer Union, und Arrays mit gemischten Elementen ergeben (A | B)[]. Arrays, die immer leer waren, werden als unknown[] typisiert, Felder, die nur null waren, als null, und beide Fälle stehen in den Hinweisen, damit Sie wissen, was Sie von Hand ergänzen müssen. Schlüssel, die keine gültigen Bezeichner sind, etwa content-type oder 2fa, werden automatisch in Anführungszeichen gesetzt.
Sie bestimmen den Stil der Ausgabe: den Namen des Wurzeltyps, interface oder type-Alias, ob die Deklarationen exportiert werden, readonly-Eigenschaften und -Arrays sowie Semikolons. Ein zweiter Reiter erzeugt aus derselben Ableitung ein JSON Schema (Draft 2020-12), mit verschachtelten Objekten in $defs, required-Listen für Felder, die in jedem Beispiel vorkommen, der Unterscheidung zwischen integer und number und dem Format date-time oder date für Zeichenketten, die wie ISO-8601-Datumswerte aussehen. JSON kennt keinen Datumstyp, daher bleiben diese Felder in TypeScript string. Beide Ergebnisse lassen sich kopieren oder als .ts- bzw. .schema.json-Datei herunterladen. Alles läuft in Ihrem Browser, private API-Antworten und Kundendaten verlassen Ihr Gerät also nie.
Das Typsystem von TypeScript ist Turing-vollständig
TypeScript-Typen sollten eigentlich JavaScript-Werte beschreiben, doch bedingte Typen, rekursive Aliase und Template Literal Types haben den Typprüfer zu einer kleinen eigenen Programmiersprache gemacht. 2017 zeigte ein GitHub-Issue, dass das Typsystem Turing-vollständig ist, und seitdem schreiben Leute Parser, Arithmetik und kleine Interpreter, die vollständig im Compiler laufen und ihre Ergebnisse als Typen liefern.
Die praktische Seite davon ist die strukturelle Typisierung. TypeScript interessiert sich nicht dafür, wie ein Interface heißt, sondern nur für seine Form. Ein Objekt mit den richtigen Feldern erfüllt also auch ein Interface, von dem es nie gehört hat. Deshalb passen aus einem JSON-Beispiel erzeugte Typen so gut: Sie beschreiben die Form der Daten, und jeder Wert mit dieser Form wird akzeptiert.