Colle le TypeScript à gauche et clique sur "Convertir" — on te le transforme en XMLColle du code TypeScript

Ce que fait cet outil

Si tu as déjà dû écrire à la main un payload XML qui reflète une interface TypeScript — pour un client SOAP, un générateur RSS, un fichier de config ou un test de contrat — tu sais combien de plomberie il faut monter. Le navigateur te donne XMLSerializer pour un DOM existant, pas pour un objet typé. Colle le TypeScript ici et tu récupères du XML bien formé en une passe. Une interface seule, un alias type, un const typé ou quelque chose de profondément imbriqué — même résultat.

Le convertisseur lit les types, pas que les valeurs. interface Order { ... } + const order: Order = { ... } produit une racine <Order> avec chaque champ de l'interface. Les champs optionnels (field?: T) absents du littéral deviennent des éléments vides pour que la sortie colle à la shape déclarée. readonly est ignoré côté sortie. Les enums émettent leur valeur (enum de strings = string, enum numérique = nombre). Les types union émettent ce que le littéral contient vraiment. Les generics sont résolus par l'instanciation concrète.

Les interfaces imbriquées et les arrays se développent en éléments imbriqués. Un champ items: OrderItem[] devient <items><OrderItem/><OrderItem/></items>, en utilisant le nom du type de l'élément pour chaque enfant. Les types Record et Map deviennent des conteneurs de <Entry><Key/><Value/></Entry>. Date, bigint et null sont traités par type — ISO-8601 pour les dates, string décimale pour bigint, éléments vides pour null. Si tu colles plusieurs définitions de types plus une constante typée, c'est la constante qui est sérialisée et les interfaces servent de schéma.

Comment l'utiliser

Trois étapes. Ça marche pareil que tu colles une petite interface ou un types.ts complet.

1

Colle ton TypeScript (ou essaie l'exemple)

Balance ton TS dans l'éditeur de gauche tel quel. Une interface, un type alias, un const typé ou un module entier — tout passe. Clique sur Charger un exemple pour voir un exemple réaliste Order / OrderItem / Address avec des objets imbriqués.

Garde les annotations de type — c'est ce que le parser utilise pour décider des noms d'éléments et des types de sortie. Laisse aussi les import et export, ils sont ignorés automatiquement.

2

Clique sur Convertir

Appuie sur le bouton vert Convertir. L'outil lit les types, résout les valeurs et sort le XML en une passe. Un petit indicateur de chargement s'affiche pendant le traitement.

3

Copie le XML

Le panneau de droite se remplit de XML indenté et bien formé que n'importe quel parseur XML conforme acceptera. Copie-le direct dans ta requête SOAP, ton template RSS, ton fichier de config ou ta fixture de test.

Quand ça rend vraiment service

Clients SOAP / APIs XML

Tu as une interface TypeScript pour un body de requête SOAP et il te faut le squelette XML à envoyer via <code>fetch</code>. Colle l'interface avec un exemple typé, copie le XML, colle-le dans ta requête.

Contrats pilotés par XSD

Génère des exemples XML à partir de tes types TS pour la doc qui accompagne un <a href="https://www.w3.org/TR/xmlschema-1/" target="_blank" rel="noopener">XSD</a>. Garde tes exemples synchronisés avec les types, qui sont eux-mêmes synchronisés avec le schéma.

Fichiers de config de départ

Une interface Settings avec 40 champs devient un template XML prêt à éditer pour n'importe quel store de config en XML. Pas de construction d'éléments à la main, pas de coquille, pas de champ oublié.

Données mock pour tests d'intégration

Convertis les fixtures typées de ton setup Vitest ou Jest en seed XML pour les systèmes legacy et les mock servers qui consomment encore du XML.

Questions courantes

Ça utilise les types ou juste les valeurs de l'objet ?

Les deux. Les types décident des noms d'éléments, de l'ordre et de quels champs doivent être présents (les optionnels deviennent des éléments vides s'ils manquent). Le littéral de valeur fournit les données. Si tu colles juste un const sans interface, l'outil utilise le littéral directement — ça marche toujours, juste sans la sécurité portée par les types.

Comment il gère les champs optionnels et les unions ?

Les champs optionnels (field?: T) absents de la valeur sont écrits comme éléments vides (<field/>) pour garder la shape cohérente en sortie. Les types union (string | number) émettent ce que le littéral contient réellement. Les unions discriminées marchent aussi — le discriminant devient attribut ou enfant selon son nom.

Et Date, bigint et enum ?

Les valeurs Date ressortent en strings ISO-8601. bigint est émis comme sa string décimale (sans suffixe n). Les enums de strings émettent la string, les enums numériques le nombre. null devient un élément vide, undefined supprime carrément l'élément sauf si le champ est déclaré obligatoire.

Il gère les generics, Record et Map ?

Oui. Les interfaces génériques sont résolues par leur instanciation concrète — Response<Order> avec une vraie valeur Order émet la shape concrète. Record<K, V> devient un conteneur d'éléments nommés, un par clé. Map devient un conteneur de paires <Entry><Key/><Value/></Entry>. Les types tuple émettent un élément par position.

Je peux coller un types.ts entier ?

Oui. Colle autant de TypeScript que tu veux. Les imports sont ignorés, les déclarations type-only définissent la shape, et le premier const typé exporté ou top-level est celui qui sera sérialisé. S'il y a plusieurs candidats, celui avec le plus de champs résolvables gagne.

Est-ce que mon code est stocké ?

Le code est envoyé au backend pour la conversion et n'est pas conservé — on ne logue pas le payload. Comme toujours avec les outils en ligne, si le code est vraiment sensible, jette un œil avant de coller.

D'autres outils qui peuvent servir

TypeScript vers XML n'est qu'une pièce du puzzle. Ces outils vont bien avec :