Conversione da JSON a definizioni di tipo TypeScript

Incollando un oggetto o un vettore JSON, genera automaticamente le corrispondenti definizioni di interfaccia e di tipo per TypeScript.

Consigli per l'uso

  • Se tutti gli elementi di un vettore sono oggetti, le loro chiavi vengono fuse in un'unica interfaccia; le chiavi assenti in qualche elemento diventano automaticamente facoltative, con il punto interrogativo.
  • Il nome del tipo radice, inizialmente «Root», si può cambiare a piacere, per esempio in `User` o `ApiResponse`. I nomi delle interfacce degli oggetti annidati sono generati automaticamente dal nome della proprietà.
  • Incollando senz'altro un JSON di esempio preso da una risposta reale, otterrete in un attimo una prima stesura delle definizioni di tipo da usare nell'interfaccia utente.
  • Ciò che si ottiene è soltanto una bozza dedotta dalla forma dei dati: conviene confrontarla con le specifiche reali dell'interfaccia — campi annullabili, campi obbligatori — e correggerla a mano.

Domande frequenti

Trascriverle a mano da una risposta di esempio richiede tempo ed espone a errori di battitura nei nomi delle chiavi e a tipi trascurati. La generazione automatica abbrevia sensibilmente il lavoro di chi sviluppa l'interfaccia utente e previene le sviste.

Le chiavi di tutti gli elementi vengono fuse e quelle presenti soltanto in alcuni diventano automaticamente proprietà facoltative, con il punto interrogativo. Se poi una stessa chiave presenta tipi diversi da un elemento all'altro, si esprime con un tipo unione, per esempio `string | number`.

Sono soltanto una deduzione meccanica dalla forma del JSON di esempio. Informazioni come l'ammissibilità del valore nullo o i campi che potrebbero essere aggiunti in futuro non si ricavano da un esempio: conviene quindi confrontarle con la documentazione dell'interfaccia e correggerle a mano.

Il nome dell'interfaccia di un oggetto annidato è generato automaticamente dal nome della proprietà che lo contiene: un oggetto sotto la chiave `profile` diventa un'interfaccia chiamata `Profile`. Se servono interfacce omonime ma di forma diversa, si distinguono con un numero progressivo in coda.
Tool-kun

A proposito — il problema dello scarto fra i tipi che gli strumenti di deduzione risolvono

TypeScript permette di scoprire i difetti già in fase di compilazione grazie alla tipizzazione statica, ma il compilatore non può conoscere il tipo dei dati JSON che arrivano da un'interfaccia esterna se non lo si definisce a mano. Ogni volta che la documentazione e la risposta reale divergono, o che un campo viene aggiunto o rimosso, occorre aggiornare le definizioni: questo scarto fra i tipi dichiarati e la realtà dell'interfaccia è da sempre un cruccio di molti progetti.

Gli strumenti che convertono il JSON in TypeScript rendono il lavoro assai più spedito, ricavando meccanicamente i tipi dalla risposta ricevuta. Fra quelli dello stesso genere è celebre quicktype, uno strumento libero che genera definizioni per più linguaggi ed è noto per la sua realizzazione ricca, capace di accettare anche schemi JSON o GraphQL.

La difficoltà della deduzione dei tipi sta nel fatto che il JSON in sé non porta con sé informazioni come «questo campo è sempre presente» o «potrà diventare nullo». Le definizioni generate non sono quindi infallibili: vanno considerate una bozza che riflette la struttura dei dati di quel particolare esempio e vanno corrette confrontandole con le specifiche reali dell'interfaccia.