UTILS.
100 % im Browser
📘

JSON Schema zu TypeScript

Kompilieren Sie ein JSON Schema (draft-07 oder 2020-12) zu TypeScript-Interfaces und Typ-Aliassen und behandeln Sie required, enums, $ref, Arrays und Kombinatoren.

Ausgabe

Über dieses Tool

Das Tool JSON Schema zu TypeScript kompiliert ein JSON-Schema-Dokument zu TypeScript-Interfaces und Typ-Aliassen und tut damit das, was die beliebte Bibliothek json-schema-to-typescript tut, ohne eine Toolchain zu installieren. Anders als die JSON-Beispiel-Konverter liest dieser ein echtes Schema: Er durchläuft das Schema-Objekt und verwandelt type:'object' in ein Interface, in dem die in required aufgeführten Schlüssel nicht-optional sind und der Rest mit ? markiert wird.

Alles wird lokal in Ihrem Browser mit JSON.parse und reinem JavaScript geparst und erzeugt, sodass Ihr Schema die Seite nie verlässt. String-Schemas mit einem enum werden zu einer Union von String-Literalen; einfache string-, number/integer-, boolean- und null-Typen werden auf ihre TypeScript-Äquivalente abgebildet; Arrays werden zu T[] (ein Tupel, wenn items ein Array ist). Kombinatoren werden unterstützt — allOf wird zu einer Schnittmenge (A & B) und anyOf / oneOf werden zu Unions (A | B) — und ein nullbarer type:[T,'null'] wird zu T | null.

Referenzen werden nach Namen aufgelöst: $ref, das auf #/definitions/X oder #/$defs/X zeigt, gibt eine benannte Typreferenz aus, und jede Definition wird als eigenes export interface oder export type erzeugt. additionalProperties fügt eine Indexsignatur [key: string]: T hinzu. Der Root-Typname fällt auf den title oder $id des Schemas zurück. Schalten Sie zwischen Interface- und Type-Ausgabe um sowie, ob Schema-description-Strings zu JSDoc-Kommentaren /** */ werden. Kopieren Sie das Ergebnis oder laden Sie eine .ts-Datei herunter.

Häufig gestellte Fragen

Welche JSON-Schema-Funktionen werden unterstützt?
object mit properties und required, string-enums als Literal-Unions, number/integer/boolean/null, Arrays (einschließlich Tupel), allOf/anyOf/oneOf-Kombinatoren, $ref auf definitions oder $defs, additionalProperties als Indexsignatur und nullbare Typ-Arrays wie ["string","null"].
Wie werden $ref und definitions behandelt?
Ein $ref wie #/definitions/Address (oder #/$defs/Address) wird zu einer Referenz auf einen benannten Typ Address, und jeder Eintrag unter definitions oder $defs wird als eigenes export interface oder export type ausgegeben, sodass die Referenzen innerhalb der Ausgabe aufgelöst werden.
Was benennt den Root-Typ?
Das Root-Namen-Feld, falls Sie es setzen, andernfalls der title des Schemas, andernfalls das letzte Segment seiner $id, andernfalls Root. Definitionsnamen stammen aus ihrem Schlüssel in definitions oder $defs, umgewandelt in PascalCase.
Kann ich die Schema-Beschreibungen behalten?
Ja. Mit aktiviertem JSDoc (Standard) wird jeder description-String am Schema oder an einer Eigenschaft als /** ... */-Kommentar über dem entsprechenden Typ oder Feld ausgegeben und bewahrt so die Dokumentation im erzeugten TypeScript.

Weitere Tools