왼쪽에 TypeScript를 붙여 넣고 "변환"을 클릭하세요 — XML로 바꿔드립니다TypeScript 코드 붙여넣기

이 도구가 하는 일

TypeScript interface를 그대로 반영한 XML payload를 손으로 짜 본 적이 있다면 — SOAP 클라이언트, RSS 생성기, config 파일, contract test 등 — 얼마나 많은 뼈대 작업이 필요한지 아실 겁니다. 브라우저가 주는 XMLSerializer는 이미 존재하는 DOM용이지, 타입이 있는 객체용이 아닙니다. 여기에 TypeScript를 붙여 넣으면 한 번에 well-formed XML이 나옵니다. 단일 interface, type alias, 타입 지정된 const, 깊게 중첩된 구조 — 결과는 동일합니다.

변환기는 값만 보지 않고 타입도 읽습니다. interface Order { ... } + const order: Order = { ... }는 interface의 모든 필드를 담은 <Order> 루트를 만듭니다. 리터럴에서 빠진 optional 필드(field?: T)는 선언된 shape에 맞추기 위해 빈 요소가 됩니다. readonly는 출력 관점에서 무시됩니다. enum은 해당 값을 emit합니다(문자열 enum은 문자열, 숫자 enum은 숫자). union 타입은 실제 리터럴이 담고 있는 값을 emit합니다. generic은 구체적인 인스턴스화로 해석됩니다.

중첩된 interface와 배열은 중첩된 요소로 펼쳐집니다. items: OrderItem[] 필드는 자식마다 요소 타입 이름을 사용해 <items><OrderItem/><OrderItem/></items>가 됩니다. Record와 Map 타입은 <Entry><Key/><Value/></Entry> 컨테이너가 됩니다. Date, bigint, null은 타입별로 처리되어 — 날짜는 ISO-8601, bigint는 10진수 문자열, null은 빈 요소가 됩니다. 여러 타입 정의 더하기 타입 지정된 상수 하나를 붙여 넣으면, 상수가 serialize되고 interface는 스키마로 쓰입니다.

사용 방법

세 단계. 짧은 interface 하나를 붙여 넣든, 통째로 된 types.ts든 똑같이 동작합니다.

1

TypeScript 붙여 넣기 (또는 샘플 사용)

왼쪽 에디터에 TS를 있는 그대로 던져 넣으세요. interface, type alias, 타입 지정 const, 모듈 전체 — 전부 괜찮습니다. 샘플 불러오기를 누르면 중첩된 객체가 포함된 실제 Order / OrderItem / Address 예시를 볼 수 있습니다.

타입 주석은 그대로 두세요 — 출력 요소 이름과 타입을 결정하는 데 parser가 사용합니다. import, export 문도 남겨 두세요. 자동으로 무시됩니다.

2

변환 누르기

초록색 변환 버튼을 클릭하세요. 도구는 타입을 읽고, 값을 해석하고, 한 번에 XML을 emit합니다. 실행 중에는 짧게 로딩 인디케이터가 표시됩니다.

3

XML 복사

오른쪽 패널이 표준을 따르는 XML 파서라면 어디서든 받아들일, 들여쓰기 된 well-formed XML로 채워집니다. SOAP 요청, RSS 템플릿, config 파일, 테스트 fixture에 그대로 붙여 넣으면 됩니다.

실제로 쓸모 있는 순간

SOAP / XML API 클라이언트

SOAP 요청 body용 TypeScript interface가 있고 <code>fetch</code>로 보낼 XML 골격이 필요할 때. interface와 타입 지정 예시를 붙여 넣고 XML을 복사해 요청에 넣으면 끝입니다.

XSD 기반 계약

<a href="https://www.w3.org/TR/xmlschema-1/" target="_blank" rel="noopener">XSD</a>와 함께 두는 문서를 위해 TS 타입에서 XML 예시를 생성하세요. 예시가 타입과 동기화되고, 타입은 스키마와 동기화된 상태로 유지됩니다.

시작용 config 파일

40개 필드의 Settings interface가 어떤 XML 기반 config 저장소든 바로 편집 가능한 XML 템플릿으로 변합니다. 손으로 요소를 조립할 일도, 오타도, 빠뜨린 필드도 없습니다.

통합 테스트용 mock 데이터

Vitest나 Jest 셋업의 타입 지정 fixture를 여전히 XML을 소비하는 legacy 시스템과 mock 서버용 XML seed 데이터로 변환하세요.

자주 묻는 질문

타입을 쓰나요, 아니면 객체 값만 쓰나요?

둘 다입니다. 타입이 요소 이름, 순서, 어떤 필드가 반드시 있어야 하는지(optional이 빠져 있으면 빈 요소가 됩니다)를 결정합니다. 실제 값 리터럴이 데이터를 제공합니다. interface 없이 const만 붙여 넣으면 도구는 리터럴을 바로 사용합니다 — 여전히 동작하지만, 타입 기반의 안전망은 없습니다.

optional 필드와 union 타입은 어떻게 처리하나요?

값에서 빠진 optional 필드(field?: T)는 출력 shape을 일관되게 유지하기 위해 빈 요소(<field/>)로 작성됩니다. union 타입(string | number)은 리터럴이 실제로 가진 값을 emit합니다. discriminated union도 됩니다 — 판별자는 이름에 따라 attribute나 자식 요소가 됩니다.

Date, bigint, enum은요?

Date 값은 ISO-8601 문자열로 나갑니다. bigint는 10진 문자열로 emit됩니다(n 접미사 없이). 문자열 enum은 문자열 값, 숫자 enum은 숫자를 emit합니다. null은 빈 요소가 되고, undefined는 필드가 required로 선언되지 않았다면 요소 자체가 빠집니다.

generic, Record, Map도 처리하나요?

네. generic interface는 구체적 인스턴스화로 해석됩니다 — 실제 Order 값을 가진 Response<Order>는 구체적인 shape을 emit합니다. Record<K, V>는 키마다 이름이 붙은 요소를 가진 컨테이너가 됩니다. Map<Entry><Key/><Value/></Entry> 쌍의 컨테이너가 됩니다. 튜플 타입은 슬롯마다 요소 하나씩 emit합니다.

types.ts 파일을 통째로 붙여 넣어도 되나요?

네. TypeScript를 원하는 만큼 붙여 넣으세요. import 문은 무시되고, type-only 선언이 shape을 정의하며, 첫 번째 export된 혹은 최상위의 타입 지정 const가 serialize 대상입니다. 후보가 여러 개라면 해석 가능한 필드가 가장 많은 것이 선택됩니다.

제 코드가 저장되나요?

코드는 변환을 위해 백엔드로 전송되고 영구 저장되지 않습니다 — payload를 로깅하지도 않습니다. 온라인 도구를 쓸 때 늘 그렇듯, 정말 민감한 내용이라면 붙여 넣기 전에 한 번 훑어보세요.

같이 쓰면 좋은 도구

TypeScript to XML은 퍼즐의 한 조각일 뿐입니다. 함께 쓰면 좋은 도구들은 이렇습니다: