PK Systems PK Systems
Entwickler-Tools

JSON zu TypeScript-Interface

Erzeugen Sie aus JSON-Daten saubere TypeScript-Interfaces — mit verschachtelten Typen, Union-Erkennung und Optional-Markierung.

JSON zu TypeScript-Interface

Ausgabe

Die Ausgabe erscheint hier beim Tippen.

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 Literalwert null wird zu einer Union mit null – das sind zwei verschiedene Fälle, die getrennt abgeleitet werden.
  • Zahlen: Ganzzahlen bleiben in Go und Rust ganze Zahlen (int64, i64); Gleitkommazahlen werden zu float64 / f64. TypeScript fasst beides zu number zusammen, weil die Sprache nicht unterscheidet.
  • Leere Arrays: [] wird zu unknown[] / []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?
Es vereinheitlicht die Element-Shapes. Enthält ein Array [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?
Ja – es gibt keine Tiefenbegrenzung. Jedes verschachtelte Objekt wird nach seinem übergeordneten Schlüssel benannt (groß geschrieben, im Singular, wenn der übergeordnete Schlüssel im Plural steht), und eine interne Tabelle verhindert Namenskollisionen, indem sie ein numerisches Suffix anhängt. Selbstreferenzielle Strukturen wie Bäume werden nicht automatisch erkannt; du musst zwei generierte Typen ggf. von Hand zusammenführen, wenn deine Daten einen Zyklus bilden.
Warum sind meine Go-Feldnamen PascalCase, obwohl ich „Beibehalten“ gewählt habe?
Go verlangt, dass exportierte Struct-Felder mit einem Großbuchstaben beginnen – das ist eine Sprachregel, keine Stilfrage. Kleingeschriebene Feldnamen wären privat und für 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?
Enterprise-Generatoren unterstützen Dutzende Zielsprachen, JSON-Schema-Eingabe, Discriminated Unions, benannte Enums und mehrstufige Verfeinerung – nützlich, wenn du ein formales Schema und ein großes Team hast. Dieses Tool ist ein leichtgewichtiger, unkomplizierter Inferrer mit TypeScript-, Go- und Rust-Ausgabe und ohne Setup. Für „Gib mir mal eben einen Typ für diese API-Antwort“-Workflows ist es schneller und das Ergebnis lässt sich leichter überfliegen und von Hand bearbeiten.
Lässt sich meine Ausgabe kompilieren?
Bei TypeScript fast immer ja. Go- und Rust-Ausgaben sind ebenfalls so kompilierbar, doch eventuell musst du die passenden Imports ergänzen (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?
Nein. Der Parser ist das 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.