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
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.