JSON zu TypeScript-Interface
Erzeugen Sie aus JSON-Daten saubere TypeScript-Interfaces — mit verschachtelten Typen, Union-Erkennung und Optional-Markierung.
Was dieser Konverter macht
Das Tool durchläuft ein JSON-Beispiel, leitet für jeden Wert einen Typ ab und gibt eine idiomatische Typdefinition in deiner gewählten Sprache aus. Objekte werden zu Interfaces (TypeScript), Structs (Go, Rust), und verschachtelte Objekte erzeugen begleitende Typdefinitionen. Arrays von Objekten vereinheitlichen die Element-Shapes – Felder, die in einigen Items vorhanden sind, in anderen nicht, werden als optional markiert, und primitive Werte, die variieren (in einigen Items String, in anderen Integer), kollabieren zu einer Union oder bei Rust zu serde_json::Value. Es werden keine Daten verschickt – der gesamte Inferrer läuft in deinem Browser.
So funktioniert es
Füge ein repräsentatives JSON-Payload ein (idealerweise einen Datensatz aus deiner API-Antwort), wähle die Zielsprache und kopiere das Ergebnis. Hat dein JSON mehrere Instanzen derselben Form (z. B. eine paginierte Liste), schließe das Array ein – aus Varianz lernt der Inferrer mehr. Der Schreibweisen-Schalter benennt Felder in der Ausgabe um, ohne die JSON-Schlüssel selbst anzufassen; bei Go und Rust bleibt der Originalschlüssel als Struct-Tag erhalten, sodass die Serialisierung verlustfrei zurückläuft.
Tipps und Stolperfallen
- Optional vs. nullable: Ein Feld, das in einigen Datensätzen fehlt, wird zu
?/Option<T>, doch ein überall vorhandenes Feld mit Literalwertnullwird zu einer Union mitnull– das sind zwei verschiedene Fälle, die getrennt abgeleitet werden. - Zahlen: Ganzzahlen bleiben in Go und Rust ganze Zahlen (
int64,i64); Gleitkommazahlen werden zufloat64/f64. TypeScript fasst beides zunumberzusammen, weil die Sprache nicht unterscheidet. - Leere Arrays:
[]wird zuunknown[]/[]interface{}/Vec<serde_json::Value>abgeleitet – wirf ein Beispiel-Item rein, um einen echten Typ zu bekommen. - Feld-Umbenennung: Nur der Inferrer benennt Felder um. Dein JSON-Parser muss Schlüssel weiterhin mappen – Go nutzt den
json:-Struct-Tag, Rust#[serde(rename = ...)].
Häufig gestellte Fragen
Wie geht es mit Arrays gemischter Typen um?
[1, 2, "x"], wird der Elementtyp zu number | string. Enthält es [{a: 1}, {a: 1, b: 2}], wird das Element zu einem Objekttyp mit a verpflichtend und b optional. In Go und Rust, wo Unions kein sauberes Pendant haben, kollabieren gemischte Primitive zu interface{} / serde_json::Value.Geht es mit tief verschachtelten Strukturen um?
Warum sind meine Go-Feldnamen PascalCase, obwohl ich „Beibehalten“ gewählt habe?
encoding/json unsichtbar. Der ursprüngliche JSON-Schlüssel bleibt im json:-Tag erhalten, sodass die Serialisierung weiterhin die Eingabe-Schreibweise erzeugt.Wie unterscheidet sich das von schwergewichtigen Codegeneratoren?
Lässt sich meine Ausgabe kompilieren?
use serde::{Deserialize, Serialize}; ist bei Rust enthalten; Gos encoding/json ist implizit). Kollidieren deine JSON-Schlüssel nach dem Umbenennen mit reservierten Wörtern, nutzt Rust automatisch r#-Raw-Identifier.Wird etwas an einen Server gesendet?
JSON.parse des Browsers und der Inferrer eine kleine rekursive Funktion auf dieser Seite. Öffne DevTools > Netzwerk und du siehst beim Tippen keine Anfragen. Sicher für produktive Payloads, interne API-Antworten und alles, was du nicht in eine gehostete SaaS einfügen würdest.