UTILS.
Standaard privé
📘

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.

Je bestanden blijven op dit apparaat

Bestanden worden in je browser verwerkt, nooit geüpload. De site downloadt de benodigde code en bestanden. Geen accounts of trackers.

Gebruik Downloaden om deze tool als één HTML-bestand op te slaan voor offline gebruik.

Privacy →
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