Plak TypeScript aan de linkerkant en klik "Converteren" — wij maken er XML vanPlak TypeScript-code

Wat deze tool doet

Als je ooit een XML-payload met de hand hebt moeten schrijven die een TypeScript interface spiegelt — voor een SOAP-client, een RSS-generator, een config-file of een contract-test — weet je hoeveel geklooi daaraan vastzit. De browser geeft je XMLSerializer voor een bestaande DOM, niet voor een typed object. Plak het TypeScript hier en je krijgt in één keer well-formed XML terug. Een enkele interface, een type-alias, een typed const of iets diep genest — zelfde resultaat.

De converter leest de types, niet alleen de waarden. interface Order { ... } + const order: Order = { ... } levert een <Order>-root op met elk veld uit de interface. Optional fields (field?: T) die in het literal ontbreken, worden lege elementen zodat de output klopt met de gedeclareerde shape. readonly wordt voor de output genegeerd. Enums emitten hun waarde (string-enums de string, numeric enums het number). Union types emitten wat het literal daadwerkelijk bevat. Generics worden opgelost via de concrete instantiatie.

Nested interfaces en arrays klappen uit naar nested elementen. Een items: OrderItem[]-veld wordt <items><OrderItem/><OrderItem/></items>, met de naam van het element-type voor elk kind. Record- en Map-types worden containers van <Entry><Key/><Value/></Entry>. Date, bigint en null worden per type behandeld — ISO-8601 voor dates, decimale string voor bigint, leeg element voor null. Als je meerdere type-definities plus één typed const plakt, is die const wat geserialiseerd wordt en dienen de interfaces als schema.

Hoe je het gebruikt

Drie stappen. Werkt hetzelfde of je nou een korte interface of een hele types.ts plakt.

1

Plak je TypeScript (of probeer het voorbeeld)

Gooi je TS zoals hij is in de editor aan de linkerkant. Een interface, een type alias, een typed const of een hele module — allemaal prima. Klik op Voorbeeld laden voor een realistisch Order / OrderItem / Address-voorbeeld met nested objects.

Laat de type-annotations staan — dat is wat de parser gebruikt om element-namen en output-types te kiezen. Laat ook import- en export-statements staan, die worden automatisch genegeerd.

2

Druk op Converteren

Klik op de groene Converteren-knop. De tool leest de types, resolvet de waarden en emit de XML in één beurt. Tijdens het verwerken verschijnt er kort een loading-indicator.

3

Kopieer de XML

Het rechterpaneel vult zich met ingesprongen, well-formed XML die elke standards-compliant XML-parser accepteert. Kopieer het rechtstreeks in je SOAP-request, RSS-template, config-file of test-fixture.

Wanneer dit echt handig is

SOAP- / XML-API-clients

Je hebt een TypeScript-interface voor een SOAP-request-body en je hebt het XML-skelet nodig om via <code>fetch</code> te versturen. Plak de interface met een typed voorbeeld, kopieer de XML, plak in je request.

XSD-gedreven contracts

Genereer XML-voorbeelden uit je TS-types voor documentatie die naast een <a href="https://www.w3.org/TR/xmlschema-1/" target="_blank" rel="noopener">XSD</a> staat. Houdt je voorbeelden in sync met de types, die weer in sync zijn met het schema.

Start-configfiles

Een Settings-interface met 40 velden wordt een klaar-om-te-editen XML-template voor elke XML-based config-store. Geen elementen met de hand bouwen, geen typo's, geen vergeten velden.

Mock data voor integratietests

Zet de typed fixtures uit je Vitest- of Jest-setup om naar XML-seed-data voor legacy-systemen en mock-servers die nog XML consumeren.

Veelgestelde vragen

Gebruikt het de types of alleen de object-waarden?

Beide. De types bepalen element-namen, volgorde en welke velden aanwezig moeten zijn (optional fields worden lege elementen als ze missen). Het waarde-literal levert de data. Als je alleen een const zonder interface plakt, gebruikt de tool het literal direct — werkt nog steeds, alleen zonder de type-gedreven vangnet.

Hoe gaat het om met optional fields en union types?

Optional fields (field?: T) die in de waarde ontbreken, worden als lege elementen (<field/>) geschreven om de output-shape consistent te houden. Union types (string | number) emitten wat het literal daadwerkelijk bevat. Discriminated unions werken ook — de discriminant wordt afhankelijk van de naam een attribute of een child-element.

Wat met Date, bigint en enum?

Date-waarden komen er als ISO-8601-strings uit. bigint wordt als z'n decimale string geëmit (zonder n-suffix). String-enums emitten de string-waarde, numeric enums het number. null wordt een leeg element, undefined laat het element helemaal weg, tenzij het veld als required is gedeclareerd.

Kan hij overweg met generics, Record en Map?

Ja. Generic interfaces worden via de concrete instantiatie resolved — Response<Order> met een echte Order-waarde emit de concrete shape. Record<K, V> wordt een container van benoemde elementen, eentje per key. Map wordt een container van <Entry><Key/><Value/></Entry>-paren. Tuple-types emitten één element per slot.

Kan ik een hele types.ts-file plakken?

Ja. Plak zoveel TypeScript als je wil. Import-statements worden genegeerd, type-only declaraties definiëren de shape en de eerste exported of top-level typed const is wat geserialiseerd wordt. Zijn er meerdere kandidaten, dan wordt degene met de meeste resolvable velden gekozen.

Wordt mijn code opgeslagen?

De code gaat naar de backend om geconverteerd te worden en wordt niet gepersisteerd — we loggen de payload niet. Zoals altijd met online tools: als de code echt gevoelig is, check hem even voor je plakt.

Andere tools die je misschien nodig hebt

TypeScript naar XML is één puzzelstuk. Deze tools gaan er prima mee samen: