UTILS.
100% in de browser
📘

JSON Schema naar TypeScript

Compileer een JSON Schema (draft-07 of 2020-12) naar TypeScript-interfaces en type-aliassen, met afhandeling van required, enums, $ref, arrays en combinators.

uitvoer

Over deze tool

De tool JSON Schema naar TypeScript compileert een JSON Schema-document naar TypeScript-interfaces en type-aliassen, en doet wat de populaire bibliotheek json-schema-to-typescript doet zonder een toolchain te installeren. Anders dan de JSON-voorbeeldconverters leest deze een echt schema: het loopt het schema-object door en zet type:'object' om in een interface waarin de in required vermelde sleutels niet-optioneel zijn en de rest met ? gemarkeerd wordt.

Alles wordt lokaal in je browser geparseerd en gegenereerd met JSON.parse en gewoon JavaScript, dus je schema verlaat de pagina nooit. String-schema's met een enum worden een union van string-literals; gewone string, number/integer, boolean en null worden op hun TypeScript-equivalenten afgebeeld; arrays worden T[] (een tuple wanneer items een array is). Combinators worden ondersteund — allOf wordt een intersection (A & B) en anyOf / oneOf worden unions (A | B) — en een nullable type:[T,'null'] wordt T | null.

Referenties worden op naam opgelost: $ref die naar #/definitions/X of #/$defs/X wijst produceert een benoemde typereferentie, en elke definitie wordt gegenereerd als een eigen export interface of export type. additionalProperties voegt een index-signatuur [key: string]: T toe. De naam van het root-type valt terug op de title of $id van het schema. Schakel tussen interface- en type-uitvoer en of schema-description-strings JSDoc /** */-commentaren worden. Kopieer het resultaat of download een .ts-bestand.

Veelgestelde vragen

Welke JSON Schema-functies worden ondersteund?
object met properties en required, string-enums als literal-unions, number/integer/boolean/null, arrays (inclusief tuples), allOf/anyOf/oneOf-combinators, $ref naar definitions of $defs, additionalProperties als een index-signatuur, en nullable type-arrays zoals ["string","null"].
Hoe worden $ref en definitions afgehandeld?
Een $ref zoals #/definitions/Address (of #/$defs/Address) wordt een referentie naar een benoemd type Address, en elke invoer onder definitions of $defs wordt geproduceerd als een eigen export interface of export type, zodat de referenties binnen de uitvoer oplossen.
Wat bepaalt de naam van het root-type?
Het root-naamveld als je het instelt, anders de title van het schema, anders het laatste segment van zijn $id, anders Root. Definitienamen komen van hun sleutel in definitions of $defs, omgezet naar PascalCase.
Kan ik de schema-descriptions behouden?
Ja. Met JSDoc aan (standaard) wordt elke description-string op het schema of een eigenschap geproduceerd als een /** ... */-commentaar boven het bijbehorende type of veld, zodat de documentatie in de gegenereerde TypeScript behouden blijft.

Meer tools