100 % lokal — Ihre Daten verlassen nie Ihren Browser

JSON in TypeScript — Schluss mit Tippen

Ein JSON-Beispiel in TypeScript-Interfaces verwandeln. Verschachtelte Objekte bekommen eigene benannte Typen — aus einem Payload wird eine fertige Datei.

Sofort Privat Null Cookies
Stil

JSON-Eingabe

TypeScript-Ausgabe

Was dieses Werkzeug tut

Aus einer JSON-Probe werden TypeScript-Typen, ein benanntes Interface je Objekt.

{ "id": 1, "name": "Ada", "address": { "city": "Paris" } }
export interface Root {
  id: number;
  name: string;
  address: Address;
}

export interface Address {
  city: string;
}

interface oder type, exportiert oder nicht, und der Wurzelname: Ihre Einstellung.

Eine Liste an der Wurzel hat endlich einen Namen

Ein Array von Objekten ist die häufigste Probe überhaupt — es ist, was ein Listen-Endpunkt liefert. Die Ausgabe war bisher allein das Interface des Elements:

export interface UsersItem {
  id: number;
}

und der eingetippte Wurzelname führte nirgendwohin. Die Liste selbst ist nun benannt:

export type Users = UsersItem[];

export interface UsersItem {
  id: number;
}

Das war ein Fehler, beim Schreiben dieser Seite gefunden und behoben. Die Zod- und io-ts-Generatoren dieser Seite gaben ihre Wurzel längst aus; TypeScript nicht.

Gleicher Name, andere Form

Typnamen stammen aus Schlüsseln, also können zwei Zweige beide Address wollen. Unterscheiden sich die Formen, wird die zweite zu Address2, statt in einem Typ zu verschmelzen, der zu keiner passt. Sind die Formen gleich, wird eine Definition geteilt — ein Address, zweimal referenziert.

Was eine Probe nicht sagen kann

Nichts wird als optional markiert, und das mit Absicht: ein einmal gesehener Schlüssel sagt, dass er auftreten kann, nicht dass er immer auftritt. "nickname": null ergibt nickname: null, denn mehr enthält die Probe nicht — weiten Sie es selbst zu string | null, sobald Sie es wissen.

Eine zwanzigstellige Kennung wird number getypt, und eine JavaScript-Zahl fasst sie nicht: jenseits von 2^53 ändert sich der Wert beim Parsen. Der Typ lügt nicht über die Probe, er erbt eine Grenze der Sprache — ist das Feld eine Snowflake-ID, machen Sie string daraus und halten Sie sie von JSON.parse fern.

Ein wiederholter Schlüssel wird abgelehnt

{"a": 1, "a": "x"} ergab a: string, wobei das letzte Vorkommen stillschweigend gewann. Zwei Werte, ein Schlüssel, keine Möglichkeit zu sagen, welchen Typ das Feld hat: die Umwandlung hält nun an und nennt das Dokument mehrdeutig. Dieselbe Antwort gab der JSON-Validator hier für dasselbe Dokument schon vorher.

Datenschutz ab Werk

Alles läuft lokal in deinem Browser mit JavaScript. Deine Daten werden nie hochgeladen, wodurch das Tool auch für sensible Inhalte sicher ist und offline funktioniert.

Häufige Fragen

Warum ist kein Feld optional?
Weil ein Dokument das nicht sagen kann. Ein vorhandener Schlüssel belegt, dass er vorkommen kann, nicht dass er immer da ist. Alles als Pflicht zu markieren ist wenigstens eine Aussage, die eine zweite Probe prüfen kann; ein erfundenes `?` wäre eine Aussage über Daten, die Sie nie gezeigt haben.
Meine Nutzerliste ergab nur `UsersItem`. Wo ist der Typ der Liste?
Er ist jetzt da. Ein Array an der Wurzel ergab allein das Interface des Elements: `UsersItem[]` musste man selbst schreiben, und der gewünschte Wurzelname verfiel stillschweigend. Die Ausgabe beginnt nun mit `export type Users = UsersItem[];`. Das war ein echter Fehler, beim Schreiben dieser Seite gefunden.
Zwei verschiedene Objekte heißen beide `Address`. Was passiert?
Das zweite wird `Address2`. Namen stammen aus Schlüsseln, und zwei Schlüssel verschiedener Zweige können denselben Namen bei verschiedener Form tragen. Sie zu verschmelzen ergäbe einen Typ, der zu keinem passt; das Suffix hält jeden ehrlich, und gleiche Formen teilen weiterhin eine Definition.

Ähnliche Konverter