UTILS.
100% nel browser
📘

Da JSON Schema a TypeScript

Compila un JSON Schema (draft-07 o 2020-12) in interfacce e alias di tipo TypeScript, gestendo required, enum, $ref, array e combinatori.

output

Informazioni su questo strumento

Lo strumento Da JSON Schema a TypeScript compila un documento JSON Schema in interfacce e alias di tipo TypeScript, facendo ciò che fa la popolare libreria json-schema-to-typescript senza installare una toolchain. A differenza dei convertitori da JSON di esempio, questo legge uno schema vero: percorre l'oggetto schema e trasforma type:'object' in un'interfaccia in cui le chiavi elencate in required sono non opzionali e le altre sono contrassegnate con ?.

Tutto viene analizzato e generato localmente nel tuo browser con JSON.parse e semplice JavaScript, quindi il tuo schema non lascia mai la pagina. Gli schemi string con un enum diventano un'unione di letterali stringa; string semplice, number/integer, boolean e null si mappano ai loro equivalenti TypeScript; gli array diventano T[] (una tupla quando items è un array). I combinatori sono supportati — allOf diventa un'intersezione (A & B) e anyOf / oneOf diventano unioni (A | B) — e un tipo nullable type:[T,'null'] diventa T | null.

I riferimenti vengono risolti per nome: un $ref che punta a #/definitions/X o #/$defs/X emette un riferimento a un tipo nominato, e ogni definizione viene generata come propria export interface o export type. additionalProperties aggiunge una index signature [key: string]: T. Il nome del tipo radice ripiega sul title o $id dello schema. Attiva l'output interface o type e se le stringhe description dello schema diventano commenti JSDoc /** */. Copia il risultato o scarica un file .ts.

Domande frequenti

Quali funzionalità di JSON Schema sono supportate?
object con properties e required, enum di stringhe come unioni di letterali, number/integer/boolean/null, array (incluse tuple), combinatori allOf/anyOf/oneOf, $ref a definitions o $defs, additionalProperties come index signature, e array di tipo nullable come ["string","null"].
Come vengono gestiti $ref e definitions?
Un $ref come #/definitions/Address (o #/$defs/Address) diventa un riferimento a un tipo nominato Address, e ogni voce sotto definitions o $defs viene emessa come propria export interface o export type, così i riferimenti si risolvono all'interno dell'output.
Cosa determina il nome del tipo radice?
La casella del nome radice se la imposti, altrimenti il title dello schema, altrimenti l'ultimo segmento del suo $id, altrimenti Root. I nomi delle definizioni derivano dalla loro chiave in definitions o $defs, convertita in PascalCase.
Posso mantenere le description dello schema?
Sì. Con JSDoc attivo (predefinito), qualsiasi stringa description sullo schema o su una proprietà viene emessa come commento /** ... */ sopra il tipo o campo corrispondente, preservando la documentazione nel TypeScript generato.

Altri strumenti