Convertitore TypeScript a XML
Incolla un'interface, un type o un oggetto tipizzato TypeScript. Ricevi XML pulito.
Cosa fa questo strumento
Se ti è mai toccato scrivere a mano un payload XML che rispecchia un'interface TypeScript — per un client SOAP, un generatore RSS, un file di config o un test di contratto — sai quanta impalcatura ci vuole. Il browser ti dà XMLSerializer per un DOM esistente, non per un oggetto tipizzato. Incolla qui il TypeScript e ottieni XML ben formato in un colpo solo. Una singola interface, un alias type, una const tipizzata o qualcosa di profondamente annidato — stesso risultato.
Il convertitore legge i tipi, non solo i valori. interface Order { ... } + const order: Order = { ... } produce una radice <Order> con ogni campo dell'interface. I campi opzionali (field?: T) mancanti nel literal diventano elementi vuoti in modo che l'output combaci con la shape dichiarata. readonly viene ignorato ai fini dell'output. Gli enum emettono il loro valore (gli enum di stringhe emettono la stringa, quelli numerici il numero). I tipi union emettono ciò che il literal contiene davvero. I generics vengono risolti dall'istanziazione concreta.
Interface annidate e array si espandono come elementi annidati. Un campo items: OrderItem[] diventa <items><OrderItem/><OrderItem/></items>, usando il nome del tipo dell'elemento per ogni figlio. I tipi Record e Map diventano container di <Entry><Key/><Value/></Entry>. Date, bigint e null vengono gestiti per tipo — ISO-8601 per le date, stringa decimale per bigint, elementi vuoti per null. Se incolli più definizioni di tipo più una costante tipizzata, è la costante a essere serializzata e le interface fanno da schema.
Come si usa
Tre passaggi. Funziona allo stesso modo sia che incolli un'interface breve sia un intero types.ts.
Incolla il tuo TypeScript (o prova l'esempio)
Butta il TS nell'editor a sinistra così com'è. Un'interface, un type alias, una const tipizzata o un modulo intero — va bene tutto. Clicca Carica esempio per vedere un caso realistico Order / OrderItem / Address con oggetti annidati.
Lascia le annotazioni di tipo — è quello che il parser usa per decidere i nomi degli elementi e i tipi di output. Lascia anche gli import e gli export; vengono ignorati automaticamente.
Clicca Converti
Premi il bottone verde Converti. Lo strumento legge i tipi, risolve i valori ed emette l'XML in un colpo. Durante l'elaborazione compare un piccolo indicatore di caricamento.
Copia l'XML
Il pannello di destra si riempie di XML indentato e ben formato che qualsiasi parser XML conforme agli standard accetta senza storie. Incollalo direttamente nella tua richiesta SOAP, nel template RSS, nel file di config o nel fixture di test.
Quando ti torna davvero utile
Client SOAP / API XML
Hai un'interface TypeScript per il body di una richiesta SOAP e ti serve lo scheletro XML da spedire con <code>fetch</code>. Incolla interface più un esempio tipizzato, copia l'XML e infilalo nella tua richiesta.
Contratti guidati da XSD
Genera esempi XML dai tuoi type TS per documentazione che sta a fianco di un <a href="https://www.w3.org/TR/xmlschema-1/" target="_blank" rel="noopener">XSD</a>. Mantiene gli esempi in sync con i tipi, che a loro volta sono in sync con lo schema.
File di config di partenza
Un'interface Settings con 40 campi diventa un template XML pronto da editare per qualsiasi store di config basato su XML. Niente costruzione manuale di elementi, niente typo, niente campi dimenticati.
Dati mock per test di integrazione
Trasforma le fixture tipizzate del tuo setup Vitest o Jest in dati XML di seed per sistemi legacy e mock server che ancora consumano XML.
Domande comuni
Usa i tipi o solo i valori dell'oggetto?
Entrambi. I tipi decidono i nomi degli elementi, l'ordine e quali campi devono esserci (gli opzionali diventano elementi vuoti se mancano). Il literal dei valori fornisce i dati. Se incolli solo una const senza interface, lo strumento usa il literal direttamente — funziona lo stesso, solo senza la sicurezza portata dai tipi.
Come gestisce i campi opzionali e i tipi union?
I campi opzionali (field?: T) mancanti nel valore vengono scritti come elementi vuoti (<field/>) per tenere la shape di output coerente. I tipi union (string | number) emettono ciò che il literal contiene davvero. Le discriminated union funzionano altrettanto — il discriminante diventa attributo o elemento figlio a seconda del nome.
E Date, bigint ed enum?
I valori Date escono come stringhe ISO-8601. bigint viene emesso come stringa decimale (senza il suffisso n). Gli enum di stringhe emettono il valore string, gli enum numerici il numero. null diventa un elemento vuoto, undefined rimuove proprio l'elemento a meno che il campo non sia dichiarato obbligatorio.
Gestisce generics, Record e Map?
Sì. Le interface generiche vengono risolte dall'istanziazione concreta — Response<Order> con un valore Order reale emette la shape concreta. Record<K, V> diventa un container di elementi nominati, uno per chiave. Map diventa un container di coppie <Entry><Key/><Value/></Entry>. Le tuple emettono un elemento per slot.
Posso incollare un intero types.ts?
Sì. Incolla tutto il TypeScript che vuoi. Gli import vengono ignorati, le dichiarazioni solo-tipo definiscono la shape e la prima const tipizzata esportata o top-level è quella che viene serializzata. Se ci sono più candidati, viene scelta quella con più campi risolvibili.
Il mio codice viene salvato?
Il codice viene inviato al backend per la conversione e non viene persistito — non logghiamo il payload. Come sempre con gli strumenti online, se il codice è davvero sensibile, dacci un'occhiata prima di incollarlo.
Altri strumenti che potrebbero servirti
TypeScript a XML è solo un pezzo del puzzle. Ecco gli strumenti che ci stanno bene insieme: