JSON zu TypeScript

Fügen Sie ein JSON-Beispiel ein, und das Tool leitet TypeScript-Schnittstellen ab, die seiner Struktur entsprechen. Felder werden durch beobachtete Werte typisiert (string, number, boolean, Array<T>), verschachtelte Objekte erhalten ihre eigenen benannten Schnittstellen, und als null oder fehlend beobachtete Felder werden optional (?) oder nullable (| null), je nach bevorzugtem Stil.

So konvertieren Sie JSON in TypeScript

  1. 1

    JSON einfügen

    Ein einzelnes Beispiel reicht aus; mehrere Beispiele verbessern die Nullbarkeit und Union-Inferenz.

  2. 2

    Ausgabestil wählen

    `interface` (Standard), `type` Alias oder schreibgeschützte Schnittstelle mit allen Feldern, die als `readonly` markiert sind.

  3. 3

    Optionale Strategie wählen

    Felder als `?` (könnten fehlen) oder `| null` (immer vorhanden, könnte null sein) markieren.

  4. 4

    Die Typen kopieren

    In eine `.ts`-Datei einfügen, und Sie haben stark typisierten Zugriff auf die API-Antwort.

Beispiel

Eingabe:

{ "id": 1, "name": "Alice", "age": null, "tags": ["admin", "user"], "address": { "city": "Madrid" } }

Ausgabe:

interface User {
  id: number;
  name: string;
  age: number | null;
  tags: string[];
  address: Address;
}

interface Address {
  city: string;
}

Typzuordnung

JSON TypeScript
Zeichenkette string
Ganzzahl / Dezimalzahl number
Boolescher Wert boolean
nur null null
null + T T | null (oder T?)
Array aus T T[]
gemischtes Array (T1 | T2)[]
Objekt Benannte verschachtelte Schnittstelle
leeres Array unknown[] (kann nicht abgeleitet werden)

Optional vs nullable

  • foo?: string, das Feld könnte fehlen im Objekt. undefined-Überprüfung gilt.
  • foo: string | null, das Feld ist immer vorhanden, könnte aber explizit null sein.
  • foo?: string | null, könnte fehlen ODER null sein.

JSON selbst hat kein undefined, aber APIs variieren, wie sie Abwesenheit signalisieren. Passen Sie Ihre API Semantik an:

  • REST-APIs lassen typischerweise fehlende Felder weg -> ?:.
  • GraphQL gibt immer jedes angeforderte Feld zurück -> | null.
  • Einige SDKs verwenden beides in unterschiedlichen Kontexten.

Union vs Literaltypen

Wenn das Tool dasselbe Stringfeld mit einer kleinen Menge von Werten über Beispiele hinweg sieht ("status": "pending", "active", "archived"), kann es eine String-Literal-Union ausgeben:

status: "pending" | "active" | "archived";

Aktivieren Sie “String-Literal-Unionen ableiten”, wenn Sie dies möchten.

Häufige Fehler

  • Ableitung aus einem Beispiel. Jedes Feld wird erforderlich; Nullbarkeit kann nicht beobachtet werden. Übergeben Sie 5-10 unterschiedliche Beispiele für bessere Typen.
  • Leere Arrays. "tags": [] gibt keine Typinformationen, der Generator gibt unknown[] aus. Stellen Sie ein Beispiel mit mindestens einem Element bereit.
  • Gemischte Typ-Arrays. [1, "two", true] produziert (number | string | boolean)[]. In der Regel bedeutet dies, dass das JSON neu gestaltet werden sollte, anstatt typisiert zu werden.
  • Numerische String-Schlüssel. JSON {"1": "a", "2": "b"} ist immer noch ein Objekt in TypeScript (Record<string, string>), kein Array. Der Generator behandelt dies korrekt.

Häufig gestellte Fragen

Passen Sie Ihre API an. REST-APIs, die null-Felder weglassen, möchten ?:. GraphQL, das immer jedes ausgewählte Feld zurückgibt, möchte | null. Im Zweifelsfall ist T | null mit erforderlicher Syntax strenger und fängt mehr Fehler zur Kompilierzeit ab.

Ja, wenn Sie es aktivieren und mehrere Beispiele bereitstellen. Ein Feld, das mit 2-5 unterschiedlichen Stringwerten über Beispiele hinweg beobachtet wird, wird als Literal-Union ausgegeben. Jenseits dieser Schwelle fällt es auf string zurück.

interface für die meisten Fälle, es ist erweiterbar und TypeScript optimiert es besser. type-Aliase sind nützlich für Unions, Schnittmengen, Tupel und abgeleitete Typen. Für aus JSON abgeleitete Typen funktioniert beides; wählen Sie eine Projektkonvention.

Ja. Jedes verschachtelte Objekt wird zu seiner eigenen Schnittstelle, mit Namen, die vom Schlüssel abgeleitet sind (user.address -> Address). Für sehr tiefe oder sich wiederholende Strukturen ziehen Sie ein JSON-Schema und einen speziellen Schema-zu-TS-Generator in Betracht.

Verwandte Tools

Tool in anderen Sprachen verfügbar