Pega TypeScript a la izquierda y pulsa "Convertir" — lo pasamos a XMLPega código TypeScript

Qué hace esta herramienta

Si alguna vez has tenido que escribir a mano un payload XML que refleje una interface de TypeScript — para un cliente SOAP, un generador de RSS, un archivo de configuración o un test de contrato — sabes la cantidad de andamio que hay que montar. El navegador te da XMLSerializer para un DOM ya existente, no para un objeto tipado. Pega aquí el TypeScript y recibes XML bien formado de una sola pasada. Una interface sola, un alias type, un const tipado o algo profundamente anidado — mismo resultado.

El conversor lee los tipos, no solo los valores. interface Order { ... } + const order: Order = { ... } produce una raíz <Order> con cada campo de la interface. Los campos opcionales (field?: T) que no aparezcan en el literal se convierten en elementos vacíos para que la salida encaje con la forma declarada. readonly se ignora a efectos de salida. Los enums emiten su valor (los de strings, la cadena; los numéricos, el número). Los tipos unión emiten lo que contenga el literal real. Los generics se resuelven por su instanciación concreta.

Las interfaces anidadas y los arrays se expanden como elementos anidados. Un campo items: OrderItem[] se convierte en <items><OrderItem/><OrderItem/></items>, usando el nombre del tipo del elemento para cada hijo. Los tipos Record y Map se convierten en contenedores de <Entry><Key/><Value/></Entry>. Date, bigint y null se tratan según el tipo — ISO-8601 para fechas, string decimal para bigint, elementos vacíos para null. Si pegas varias definiciones de tipo más una constante tipada, la constante es la que se serializa y las interfaces se usan como esquema.

Cómo usarlo

Tres pasos. Funciona igual tanto si pegas una interface corta como un types.ts entero.

1

Pega tu TypeScript (o prueba el ejemplo)

Suelta el TS en el editor de la izquierda tal cual. Una interface, un type alias, un const tipado o un módulo entero — todo vale. Pulsa Cargar ejemplo para ver un caso realista de Order / OrderItem / Address con objetos anidados.

Deja las anotaciones de tipo — es lo que usa el parser para decidir los nombres de los elementos y los tipos de salida. Deja también los import y export; se ignoran automáticamente.

2

Pulsa Convertir

Haz clic en el botón verde Convertir. La herramienta lee los tipos, resuelve los valores y emite el XML de una sola pasada. Mientras trabaja aparece un pequeño indicador de carga.

3

Copia el XML

El panel derecho se llena con XML indentado y bien formado que cualquier parser XML estándar aceptará sin problemas. Cópialo directamente a tu petición SOAP, plantilla RSS, archivo de configuración o fixture de test.

Cuándo resulta útil de verdad

Clientes SOAP / APIs XML

Tienes una interface de TypeScript para el body de una petición SOAP y necesitas el esqueleto XML para mandarlo con <code>fetch</code>. Pega la interface más un ejemplo tipado, copia el XML y lo metes en tu petición.

Contratos basados en XSD

Genera ejemplos XML a partir de tus tipos TS para documentación que vive junto a un <a href="https://www.w3.org/TR/xmlschema-1/" target="_blank" rel="noopener">XSD</a>. Mantiene los ejemplos sincronizados con los tipos, que a su vez están sincronizados con el esquema.

Archivos de config de partida

Una interface Settings con 40 campos se convierte en una plantilla XML lista para editar para cualquier almacén de configuración basado en XML. Sin montar elementos a mano, sin erratas, sin campos olvidados.

Datos mock para tests de integración

Convierte los fixtures tipados de tu setup de Vitest o Jest en datos XML de prueba para sistemas legacy y servidores mock que todavía consumen XML.

Preguntas frecuentes

¿Usa los tipos o solo los valores del objeto?

Ambos. Los tipos deciden los nombres de los elementos, el orden y qué campos deben aparecer (los opcionales se vuelven elementos vacíos si faltan). El literal de valor aporta los datos. Si pegas solo un const sin interface, la herramienta usa el literal directamente — sigue funcionando, pero sin la red de seguridad de los tipos.

¿Cómo trata los campos opcionales y los tipos unión?

Los campos opcionales (field?: T) que faltan en el valor se escriben como elementos vacíos (<field/>) para mantener la forma de la salida consistente. Los tipos unión (string | number) emiten lo que contenga el literal. Las uniones discriminadas también funcionan — el discriminante se convierte en atributo o en elemento hijo según su nombre.

¿Y Date, bigint y enum?

Los valores Date salen como cadenas ISO-8601. bigint se emite como su string decimal (sin el sufijo n). Los enums de strings emiten el valor string, los numéricos el número. null se convierte en un elemento vacío y undefined se omite entero a menos que el campo esté declarado como obligatorio.

¿Maneja generics, Record y Map?

Sí. Las interfaces genéricas se resuelven por la instanciación concreta — Response<Order> con un valor real de Order emite la forma concreta. Record<K, V> se convierte en un contenedor de elementos nombrados, uno por clave. Map se convierte en un contenedor de pares <Entry><Key/><Value/></Entry>. Los tipos tupla emiten un elemento por posición.

¿Puedo pegar un types.ts entero?

Sí. Pega todo el TypeScript que quieras. Los imports se ignoran, las declaraciones solo-de-tipos definen la forma y el primer const tipado exportado o de nivel superior es lo que se serializa. Si hay varios candidatos, se elige el que tenga más campos resolubles.

¿Se guarda mi código?

El código se envía al backend para la conversión y no se persiste — no logueamos el payload. Como siempre con herramientas online, si el código es realmente sensible, échale un vistazo antes de pegarlo.

Otras herramientas que te pueden hacer falta

TypeScript a XML es solo una pieza del puzle. Estas casan bien con ella: