JSON in TypeScript
Trasforma un payload di esempio in interfacce TypeScript: gli oggetti annidati ottengono un tipo proprio, gli array misti diventano unioni, e le chiavi assenti da alcune righe escono opzionali.
JSON
TypeScript
Su questo strumento
Tipizzare a mano la risposta di un’API è noioso e facile da sbagliare in modo sottile. Incolla un payload reale e le interfacce vengono generate: ogni oggetto annidato diventa un tipo con un nome proprio, gli array di oggetti vengono fusi in un’unica forma così che una chiave assente da alcune righe risulti opzionale, e gli array misti diventano unioni. Le forme identiche vengono emesse una volta sola e condivise. Ciò che non può fare è indovinare oltre l’esempio: un campo che nel tuo campione è null viene tipizzato null, perché nulla nei dati dice altro.
Come si usa
- 1Incolla una risposta JSON rappresentativa: più righe ha un array, migliore è il riconoscimento dei campi opzionali.
- 2Dai un nome al tipo radice e scegli interface o type, in base alla tua base di codice.
- 3Copia il risultato in un file .d.ts, poi allarga ogni campo che l’esempio ha descritto troppo strettamente.
Domande frequenti
›Come vengono decisi i campi opzionali?
Confrontando gli oggetti di un array. Se una chiave è presente in alcuni elementi e assente in altri viene segnata come opzionale; una chiave presente ovunque è obbligatoria. Un oggetto singolo non fornisce indizi in nessuna direzione, quindi tutte le sue chiavi escono obbligatorie.
›Perché un campo è tipizzato null invece che string | null?
Perché null è tutto ciò che il campione ha mostrato. L’inferenza può descrivere solo i dati ricevuti: allarga quei campi a mano, oppure incolla un campione che includa un valore valorizzato.
›Perché due chiavi diverse condividono un’interfaccia?
Le forme identiche vengono emesse una volta sola e riusate, il che tiene corta l’uscita. Rinomina l’interfaccia se sono concettualmente tipi diversi che oggi si somigliano per caso.
›interface o type: quale scelgo?
Le interfacce si possono estendere e unire per dichiarazione, il che si adatta alle forme di oggetto e alle API pubbliche. Gli alias di tipo coprono anche unioni e tipi mappati. Per semplici forme di payload generate i due si comportano allo stesso modo, quindi usa ciò che la tua base di codice già usa.
›Questo valida i dati a runtime?
No. I tipi TypeScript vengono cancellati in compilazione, quindi nulla verifica che una risposta di API corrisponda davvero. Se ti servono garanzie a runtime, genera invece uno schema con Zod o Valibot e ricavane il tipo.