본문으로 건너뛰기

JSON을 TypeScript 타입 정의로 변환 — Numio

API 응답 같은 JSON 샘플로 TypeScript interface나 타입 별칭을 생성합니다. 중첩, null, 혼합 배열을 처리하며 변환은 브라우저에서 실행됩니다.

API 응답에 이름 있는 TypeScript 타입을 만듭니다.

Converted in your browser. Null stays a value type; ? marks a field missing from some objects in an array. Empty arrays use unknown elements.

Load an example (replaces your input)

JSON

TypeScript

이럴 때 사용하세요

  • API 응답에 이름 있는 TypeScript 타입을 만듭니다.
  • 배열 안의 여러 객체를 비교해 서로 다른 타입과 선택적 필드를 확인합니다.

사용 방법

  1. 실제 JSON을 붙여 넣거나 예시 중 하나를 불러옵니다. 예시를 불러오면 입력이 바뀝니다.
  2. 루트 타입 이름을 정하고 interface(중첩 객체가 별도 타입이 됨) 또는 type(중첩 객체를 인라인으로 쓴 타입 별칭 하나)을 고릅니다.
  3. null, 선택적(?) 필드, string/number 유니언을 확인한 뒤 타입을 복사합니다.

JSON 입력

[{"id":1,"name":"Tokyo"},{"id":2}]

TypeScript 출력 (Root, interface)

export type Root = RootValueItem[];

export interface RootValueItem {
  id: number;
  name?: string;
}

세부 정보 및 제한 사항

모든 배열 요소를 검사합니다. 예시에서 두 번째 객체에 name이 없으므로 선택적이 되고, 있지만 null인 필드는 null과의 유니언이 됩니다.

빈 배열은 unknown[]이 됩니다. 혼합 배열은 고정 길이 튜플이 아니라 유니언 타입의 배열이 됩니다.

타입은 샘플에 나타난 내용만 다룹니다. 한 번도 나오지 않은 필드, 날짜나 이메일 형식, 값 범위, 필드 간 관계는 추론하지 않습니다.

입력은 표준 JSON이어야 합니다. 주석이나 후행 쉼표는 먼저 JSON 포맷터로 정리하세요. 앞에 0이 있는 ID는 문자열로 입력하세요.

입력은 1,000,000자, 약 64단계, 50,000개 값으로 제한됩니다. TypeScript 타입은 런타임에 데이터를 검증하지 않습니다.

FAQ

interface와 type 중 무엇을 생성해야 하나요?

둘 다 같은 구조를 나타냅니다. interface는 중첩 객체마다 이름 있는 interface를 하나씩 만들어 재사용하기 쉽고, type은 중첩 객체를 인라인으로 쓴 타입 별칭 하나를 만듭니다.

TypeScript class를 생성할 수 있나요?

아니요. interface나 타입 별칭만 생성합니다. 런타임 검증이 필요하면 JSON to Zod를 사용하고 규칙에 맞게 스키마를 조정하세요.

null과 선택적 필드는 어떻게 다른가요?

{"name":null}에는 값이 null인 name이 있고, {}에는 name이 아예 없습니다. null은 타입에 남고, ?는 같은 배열의 일부 객체에 그 필드가 없을 때만 붙습니다.

루트가 JSON 배열이면 무엇이 생성되나요?

위 예시처럼 배열용 타입 별칭과 항목용 interface가 생성되며, 여기서 Root는 RootValueItem[]입니다.

사양 및 참고 자료