JSON to TypeScript

TypeScript-Interfaces aus JSON generieren

Beispiel ausprobieren
Name des Root-Interface:

JSON-Eingabe

TypeScript-Ausgabe

Läuft lokal · Sicher zum Einfügen von Secrets
TypeScript-Interfaces erscheinen hier…

Was ist die JSON-zu-TypeScript-Konvertierung?

JSON-Payload einfügen und TypeScript-Interfaces zurückbekommen — typisierte Verträge, die exakt beschreiben, welche Properties ein Objekt hat und welchen Typ jede davon besitzt. Ohne sie kommt data aus JSON.parse() als any an, ohne Editor-Unterstützung und ohne Compiler-Prüfungen bei Property-Zugriff oder Zuweisung. Die Konvertierung von JSON zu TypeScript verschafft diese Typsicherheit, ohne Interfaces manuell schreiben zu müssen.

TypeScript deckt alle sechs JSON-Wertetypen ab: string, number, boolean, null, object und array. Jedes verschachtelte JSON-Objekt wird zu einem eigenen benannten Interface. Arrays werden anhand ihres ersten Elements typisiert. Das Ergebnis entspricht dem, was JSON.parse() zur Laufzeit tatsächlich zurückgibt, sodass die Interfaces reale Daten widerspiegeln statt Vermutungen.

Interfaces für große oder tief verschachtelte JSON-Strukturen manuell zu schreiben ist aufwendig und fehleranfällig. Ein JSON-zu-TypeScript-Generator liest die Struktur automatisch, verarbeitet Verschachtelungen rekursiv und gibt sauberen Interface-Code in Sekunden aus. Das ist besonders nützlich beim Einbinden einer unbekannten API, beim Prototyping mit Mock-Daten oder beim Migrieren einer JavaScript-Codebase nach TypeScript. Außerdem entfällt das manuelle Nachverfolgen von verschachtelten Property-Namen und Typen, sodass der Fokus auf der Anwendungslogik statt auf Type-Boilerplate liegen kann.

Warum einen JSON-zu-TypeScript-Generator verwenden?

TypeScript-Interfaces von Hand zu generieren ist bei kleinen Objekten praktikabel, bricht aber bei verschachtelten Strukturen oder großen API-Antworten schnell zusammen. Eine API-Antwort mit 50 Feldern und drei Verschachtelungsebenen bedeutet manuell Dutzende von Interfaces — jedes eine potenzielle Quelle für Tippfehler oder übersehene Nullable-Felder. Ein automatisierter Generator erzeugt die komplette Menge in Millisekunden und reduziert das Risiko von Typ-Inkompatibilitäten zwischen Code und den verarbeiteten Daten. Über die Genauigkeit hinaus hält er die Types mit dem tatsächlichen API-Vertrag synchron. Wenn ein Service seine Response-Struktur ändert, einfach das aktualisierte JSON einfügen und neu generieren — deutlich schneller als jede Property aufzuspüren, die sich in einer handgeschriebenen Interface-Datei verschoben hat.

Interfaces sofort generieren
Beliebigen JSON-Payload einfügen und korrekt typisierte Interfaces in Millisekunden erhalten. Keine Konfiguration, kein Build-Schritt erforderlich.
🔒
Daten privat halten
Die gesamte Konvertierung läuft im Browser. JSON verlässt niemals den eigenen Rechner — relevant beim Arbeiten mit Produktionsdaten oder internen API-Antworten.
📋
Verschachtelte Strukturen automatisch verarbeiten
Verschachtelte Objekte erzeugen separate benannte Interfaces. Arrays, Nullable-Felder und gemischte Typen werden ohne manuellen Eingriff aufgelöst.
🌐
Kein Konto oder Installation erforderlich
Funktioniert in jedem modernen Browser. Keine npm-Pakete zu installieren, keine CLI-Tools zu konfigurieren, keine Anmeldeformulare auszufüllen.

JSON-zu-TypeScript-Anwendungsfälle

Frontend-API-Integration
REST- oder GraphQL-JSON-Antworten einfügen, um Interfaces für React-, Angular- oder Vue-Komponenten zu generieren. Typsichere Props und State verhindern Laufzeit-Überraschungen. Generierte Interfaces lassen sich in einem Monorepo auch zwischen Frontend und Backend teilen, damit beide Seiten über dieselbe Datenstruktur einig sind.
Backend-Response-Typisierung
Node.js- und Deno-Services, die Drittanbieter-APIs konsumieren, profitieren von generierten Interfaces. Den Vertrag einmal definieren, Struktur-Abweichungen zur Compile-Zeit abfangen. Generierte Interfaces sind zugleich leichtgewichtige Dokumentation für Service-Consumer und reduzieren den Bedarf an separaten Schema-Dateien oder Wiki-Seiten.
DevOps-Konfigurationsdateien
Infrastruktur-Tools wie AWS CDK oder Pulumi verwenden JSON-Konfigurationen. TypeScript-Typen dafür generieren, um sie vor dem Deployment zu validieren. Das fängt fehlkonfigurierte Deployments durch Tippfehler oder falsche Wertetypen ab, bevor der Code in Produktion gelangt.
QA-Test-Fixtures
Interfaces aus JSON-Test-Fixtures generieren, damit Assertions der erwarteten Datenstruktur entsprechen. Fehlende oder umbenannte Felder erkennen, bevor Tests laufen.
Datenpipeline-Verträge
Wenn eine Pipeline JSON-Ausgaben erzeugt, fungieren generierte Interfaces als Schema für nachgelagerte Consumer. Änderungen an der Ausgabestruktur lösen Compile-Fehler aus.
TypeScript lernen
Einsteiger und Entwickler, die neu bei TypeScript sind, können bekannte JSON-Strukturen einfügen und sehen, wie Interfaces auf Daten abgebildet werden. Das überbrückt die Lücke zwischen dynamischer und statischer Typisierung.

JSON-zu-TypeScript-Typ-Mapping-Referenz

Jeder JSON-Wert wird einem TypeScript-Typ zugeordnet. Die Tabelle zeigt, wie jeder JSON-Primitiv- und Strukturtyp übersetzt wird. Dieses Mapping folgt dem ECMA-404-JSON-Standard und den eingebauten TypeScript-Typen.

JSON-TypBeispielwertTypeScript-Typ
string"hello"string
number42, 3.14number
booleantrue, falseboolean
nullnullnull
object{"key": "value"} nested interface
array[1, 2, 3]number[] (inferred from first element)

TypeScript interface vs. type-Alias

TypeScript bietet zwei Wege, Objektstrukturen zu beschreiben: Interface-Deklarationen und Type-Aliases. Beide eignen sich zur Darstellung von JSON-Strukturen, unterscheiden sich aber in Erweiterung und Merging-Verhalten. Die meisten JSON-zu-TypeScript-Generatoren geben Interfaces aus, weil sie die idiomatische Wahl für Objektstrukturen in TypeScript sind.

interface
Unterstützt Declaration Merging und extends-Syntax. Bevorzugt für Objektstrukturen, besonders in öffentlichen APIs und Libraries. Kann von anderen Interfaces erweitert oder mit Types geschnitten werden.
type
Unterstützt Union Types, Intersection Types und Mapped Types. Besser geeignet für berechnete Typen, Discriminated Unions oder wenn ein Primitiv aliasiert werden soll. Kann nicht für Declaration Merging wiedereröffnet werden.

Code-Beispiele

Nachfolgend Beispiele zum Generieren von TypeScript-Interfaces aus JSON in verschiedenen Sprachen und Tools. Jeder Ausschnitt erzeugt ausführbare Ausgabe.

TypeScript
// Manual interface definition from a JSON shape
const json = '{"id": 1, "name": "Alice", "active": true}';
const parsed = JSON.parse(json);

interface User {
  id: number;
  name: string;
  active: boolean;
}

const user: User = parsed;
console.log(user.name); // "Alice" — fully typed
JavaScript (json-to-ts library)
import JsonToTS from 'json-to-ts';

const json = {
  id: 1,
  name: "Alice",
  address: { street: "123 Main St", city: "Springfield" },
  tags: ["admin", "user"]
};

const interfaces = JsonToTS(json, { rootName: "User" });
console.log(interfaces.join("\n\n"));
// interface Address {
//   street: string;
//   city: string;
// }
//
// interface User {
//   id: number;
//   name: string;
//   address: Address;
//   tags: string[];
// }
Python (datamodel-code-generator)
# Install: pip install datamodel-code-generator
# Generate TypeScript-style types from JSON using Pydantic models

# Command line:
# datamodel-codegen --input data.json --output model.py

# Or generate TypeScript directly with quicktype:
# pip install quicktype
# quicktype --lang ts --src data.json --out types.ts

import json

data = {"id": 1, "name": "Alice", "scores": [98, 85, 92]}

# Python equivalent using TypedDict (Python 3.8+)
from typing import TypedDict, List

class User(TypedDict):
    id: int
    name: str
    scores: List[int]

user: User = data  # type-checked by mypy
CLI (quicktype)
# Install quicktype globally
npm install -g quicktype

# Generate TypeScript interfaces from a JSON file
quicktype --lang ts --src data.json --out types.ts

# From a JSON string via stdin
echo '{"id": 1, "name": "Alice"}' | quicktype --lang ts

# Output:
# export interface Root {
#   id:   number;
#   name: string;
# }

Häufig gestellte Fragen

Wie behandelt JSON to TypeScript optionale Felder?
Wenn ein JSON-Wert null ist, markiert der Generator die Property als optional mit einem ?-Suffix und weist den null-Typ zu. Wenn zwischen fehlenden Schlüsseln und null-Werten unterschieden werden soll, kann die Ausgabe manuell angepasst werden, um undefined für fehlende Properties zu verwenden.
Kann ich JSON-Arrays nach TypeScript konvertieren?
Ja. Wenn das Root-JSON ein Array ist, prüft der Generator das erste Element, um den Element-Typ abzuleiten, und gibt ein Interface für dieses Element aus. Der Root-Typ wird zu diesem Interface gefolgt von []. Leere Arrays erzeugen unknown[], da kein Element zur Inspektion vorhanden ist.
Was passiert mit tief verschachtelten JSON-Objekten?
Jedes verschachtelte Objekt generiert ein separates benanntes Interface. Der Name leitet sich vom Property-Key ab, konvertiert in PascalCase. Eine Property namens "shipping_address" erzeugt zum Beispiel ein Interface ShippingAddress. Das hält die Ausgabe lesbar, auch bei JSON mit vier oder fünf Verschachtelungsebenen. Wenn mehrere verschachtelte Objekte dieselbe Struktur teilen, kann es sinnvoll sein, sie manuell in ein einzelnes gemeinsames Interface zusammenzuführen, um Duplikate in der Codebase zu reduzieren.
Was ist der Unterschied zwischen json2ts und quicktype?
json2ts ist ein einfacher Konverter, der JSON-Werte direkt auf TypeScript-Interfaces abbildet. quicktype geht weiter: Es analysiert mehrere JSON-Samples, dedupliziert ähnliche Strukturen und unterstützt Ausgabe in über 20 Sprachen. Für einmalige Konvertierungen ist ein Browser-basiertes Tool schneller. Für CI-Pipelines oder mehrsprachiges Codegen ist quicktype die bessere Wahl.
Warum Interfaces statt Type-Aliases für JSON verwenden?
Interfaces unterstützen Declaration Merging, was bedeutet, dass ein generiertes Interface in einer separaten Datei erweitert werden kann, ohne das Original zu ändern. Sie erzeugen auch klarere Fehlermeldungen in den meisten Editoren. Type-Aliases sind besser, wenn Union Types oder Mapped Types benötigt werden, aber für geradlinige JSON-Objektstrukturen sind Interfaces die Standardwahl. Wer eine Library oder ein SDK erstellt, sollte fast immer zu Interfaces greifen, da nachgelagerte Consumer sie per Declaration Merging erweitern können, ohne den Quellcode zu berühren.
Kann das Tool JSON mit inkonsistenten Typen in Arrays verarbeiten?
Der Generator leitet den Array-Element-Typ vom ersten Nicht-null-Element ab. Wenn das Array gemischte Typen enthält — zum Beispiel Objekte gemischt mit Strings — spiegelt die Ausgabe nur die Struktur des ersten Elements wider. Bei heterogenen Arrays muss nach der Generierung manuell ein Union-Array-Typ definiert werden, etwa ein Typ, der sowohl Item- als auch String-Elemente akzeptiert, um alle möglichen Element-Typen korrekt darzustellen.
Wie verwende ich generierte Interfaces in einem echten Projekt?
Die generierten Interfaces in eine .ts-Datei im Projekt kopieren, typischerweise in ein types/- oder models/-Verzeichnis. Dort importieren, wo JSON-Daten abgerufen oder verarbeitet werden. Mit einem Laufzeit-Validator wie Zod oder io-ts kombinieren, wenn sichergestellt werden soll, dass API-Antworten zur Laufzeit dem Interface entsprechen, nicht nur zur Compile-Zeit. Mit Zod lässt sich der TypeScript-Typ direkt aus dem Schema über den infer-Utility ableiten — das eliminiert Duplikate zwischen Interface-Definition und Validierungslogik.
Bieten generierte TypeScript-Interfaces Laufzeit-Typsicherheit?
Nein — das TypeScript-Typsystem wird bei der Kompilierung entfernt. Interfaces existieren nur im Editor und während des Builds, nicht zur Laufzeit. JSON.parse() gibt unabhängig vom zugewiesenen Typ immer any zurück. Um Typen zur Laufzeit durchzusetzen, generierte Interfaces mit einer Library wie Zod oder io-ts kombinieren. Diese Libraries validieren, dass ein eingehendes Objekt tatsächlich der erwarteten Struktur entspricht, bevor es verwendet wird — das schützt vor fehlerhaften API-Antworten, fehlenden Feldern und unerwarteten null-Werten.