JSON → tipi TypeScript
Deduce all’istante interfacce TypeScript da un esempio JSON
Su questo strumento
Incolla un campione di JSON — una risposta API, un file di configurazione — e ottieni un’interfaccia TypeScript inferita da esso: gli oggetti annidati diventano tipi annidati, gli array ricevono i tipi degli elementi (con union per contenuti misti) e le chiavi che non sono identificatori validi vengono quotate correttamente.
I tipi generati sono un punto di partenza, non un contratto: l’inferenza vede un solo campione, quindi un campo che nel tuo esempio è per caso null viene tipizzato come null, e i campi opzionali assenti le sono semplicemente ignoti. L’output è volutamente essenziale — niente decoratori, niente validazione a runtime — così puoi incollarlo ovunque e rifinirlo.
Per i campi che variano tra le richieste, fai passare un secondo campione e fai il merge a mano, oppure passa a strumenti schema-first (OpenAPI, zod) quando la forma si stabilizza. Per il quotidiano "mi serve solo un tipo per questa risposta", un incolla basta.
Domande frequenti
- Perché il mio campo nullable è tipizzato solo come null?
- L’inferenza vede soltanto il campione che hai incollato. Se lì il campo era null, null è tutto ciò che può sapere. Cambialo in string | null (o qualunque sia il tipo reale) dopo la generazione — oppure incolla un campione in cui il campo è valorizzato.
- Come vengono gestiti i campi opzionali?
- Non vengono rilevati — un singolo campione non può distinguere "sempre presente" da "presente questa volta". I campi assenti dal campione sono assenti dal tipo. Segna manualmente come opzionali (name?:) i campi che sai che l’API omette.
- Cosa producono gli array a tipi misti?
- Una union: [1, "a"] inferisce (number | string)[]. Gli array vuoti inferiscono unknown[] perché non c’è alcun elemento da ispezionare — sostituiscilo con il tipo reale degli elementi quando lo conosci.
- Dovrei usare i tipi inferiti o una libreria di schemi come zod?
- Le interfacce inferite esistono solo a compile time — non validano nulla a runtime. Per strumenti interni e tipizzazione rapida sono perfette; per input non fidato a runtime, definisci uno schema zod/valibot e derivane il tipo statico.