TypeScript zu XML Converter
Füg ein TypeScript-Interface, einen Type oder ein typisiertes Objekt ein. Bekomm sauberes XML zurück.
Was das Tool macht
Wenn du schon mal ein XML-Payload von Hand schreiben musstest, das ein TypeScript-Interface spiegelt — für einen SOAP-Client, einen RSS-Generator, eine Config-Datei oder einen Contract-Test — weißt du, wie viel Gerüst da dran hängt. Der Browser gibt dir XMLSerializer für ein bestehendes DOM, nicht für ein typisiertes Objekt. Füg das TypeScript hier ein und bekomm wohlgeformtes XML in einem Durchgang zurück. Ein einzelnes interface, ein type-Alias, ein typisiertes const oder etwas tief Verschachteltes — dasselbe Ergebnis.
Der Converter liest die Types, nicht nur die Werte. interface Order { ... } plus const order: Order = { ... } ergibt eine <Order>-Root mit jedem Feld aus dem Interface. Optionale Felder (field?: T), die im Literal fehlen, werden zu leeren Elementen, damit die Ausgabe der deklarierten Shape entspricht. readonly wird für die Ausgabe ignoriert. Enums emitten ihren Wert (String-Enums emitten den String, numerische Enums die Zahl). Union-Types emitten das, was das Literal tatsächlich enthält. Generics werden über die konkrete Instanziierung aufgelöst.
Verschachtelte Interfaces und Arrays werden zu verschachtelten Elementen expandiert. Ein Feld items: OrderItem[] wird zu <items><OrderItem/><OrderItem/></items>, mit dem Element-Typ-Namen für jedes Kind. Record- und Map-Types werden zu Containern aus <Entry><Key/><Value/></Entry>. Date, bigint und null werden nach Type behandelt — ISO-8601 für Dates, Dezimal-String für bigint, leere Elemente für null. Wenn du mehrere Type-Definitionen plus eine typisierte Konstante einfügst, wird die Konstante serialisiert und die Interfaces dienen als Schema.
So benutzt du es
Drei Schritte. Funktioniert gleich, ob du ein kurzes Interface oder ein ganzes types.ts einfügst.
TypeScript einfügen (oder Beispiel probieren)
Wirf dein TS einfach so in den linken Editor. Ein Interface, ein Type Alias, ein typisiertes const oder ein ganzes Modul — alles kein Thema. Klick auf Beispiel laden, um ein realistisches Order / OrderItem / Address-Beispiel mit verschachtelten Objekten zu sehen.
Lass die Typannotationen drin — das nutzt der Parser, um Elementnamen und Ausgabe-Types zu bestimmen. Lass auch import- und export-Statements drin, sie werden automatisch ignoriert.
Konvertieren drücken
Klick den grünen Konvertieren-Button. Das Tool liest die Types, löst die Werte auf und emittet das XML in einem Rutsch. Während es läuft, siehst du kurz einen Lade-Indikator.
XML kopieren
Rechts erscheint eingerücktes, wohlgeformtes XML, das jeder standardkonforme XML-Parser akzeptiert. Kopier es direkt in deinen SOAP-Request, dein RSS-Template, deine Config-Datei oder dein Test-Fixture.
Wann das richtig nützlich ist
SOAP- / XML-API-Clients
Du hast ein TypeScript-Interface für einen SOAP-Request-Body und brauchst das XML-Grundgerüst, um es per <code>fetch</code> zu schicken. Interface plus typisiertes Beispiel einfügen, XML kopieren, in deinen Request setzen.
XSD-getriebene Verträge
Erzeug XML-Beispiele aus deinen TS-Types für Dokumentation, die neben einem <a href="https://www.w3.org/TR/xmlschema-1/" target="_blank" rel="noopener">XSD</a> liegt. Hält deine Beispiele synchron mit den Types, die synchron mit dem Schema sind.
Start-Config-Dateien
Ein Settings-Interface mit 40 Feldern wird zu einem editierfertigen XML-Template für jeden XML-basierten Config-Store. Kein Handzusammensetzen von Elementen, keine Tippfehler, keine vergessenen Felder.
Mock-Daten für Integrationstests
Wandle die typisierten Fixtures aus deinem Vitest- oder Jest-Setup in XML-Seed-Daten um, für Legacy-Systeme und Mock-Server, die noch XML konsumieren.
Häufige Fragen
Benutzt es die Types oder nur die Werte des Objekts?
Beides. Die Types entscheiden über Elementnamen, Reihenfolge und welche Felder vorhanden sein müssen (optionale werden zu leeren Elementen, wenn sie fehlen). Das eigentliche Wert-Literal liefert die Daten. Wenn du nur ein const ohne Interface einfügst, nimmt das Tool das Literal direkt — funktioniert weiterhin, nur ohne die type-getriebene Sicherheit.
Wie geht es mit optionalen Feldern und Union-Types um?
Optionale Felder (field?: T), die im Wert fehlen, werden als leere Elemente (<field/>) geschrieben, damit die Ausgabe-Shape konsistent bleibt. Union-Types (string | number) emitten das, was das Literal tatsächlich enthält. Discriminated Unions gehen auch — der Diskriminator wird je nach Namen zum Attribut oder zum Kindelement.
Was ist mit Date, bigint und enum?
Date-Werte kommen als ISO-8601-Strings raus. bigint wird als Dezimal-String emittet (ohne das n-Suffix). String-Enums emitten den String-Wert, numerische Enums die Zahl. null wird zum leeren Element, undefined lässt das Element komplett weg, außer das Feld ist als required deklariert.
Kann es mit Generics, Record und Map umgehen?
Ja. Generische Interfaces werden über die konkrete Instanziierung aufgelöst — Response<Order> mit einem echten Order-Wert emittet die konkrete Shape. Record<K, V> wird zu einem Container aus benannten Elementen, einem pro Key. Map wird zu einem Container aus <Entry><Key/><Value/></Entry>-Paaren. Tuple-Types emitten ein Element pro Slot.
Kann ich eine ganze types.ts-Datei einfügen?
Ja. Füg so viel TypeScript ein, wie du willst. Import-Statements werden ignoriert, reine Type-Deklarationen definieren die Shape, und das erste exportierte oder Top-Level-typisierte const wird serialisiert. Gibt es mehrere Kandidaten, wird der mit den meisten auflösbaren Feldern genommen.
Wird mein Code gespeichert?
Der Code wird zur Konvertierung ans Backend geschickt und nicht persistiert — wir loggen das Payload nicht. Wie immer bei Online-Tools: Wenn der Code wirklich sensibel ist, schau ihn vorher nochmal durch.
Andere Tools, die du brauchen könntest
TypeScript zu XML ist nur ein Teil vom Puzzle. Diese Tools passen gut dazu: