본문으로 건너뛰기
Ink·tab

JSON 샘플로 인터페이스 추출

API 응답 한 번 붙여넣으면 TypeScript 타입이 그대로 나옵니다.

TypeScript
export interface Address {
  city: string;
  zip: string;
}

export interface PostsItem {
  title: string;
  views: number;
}

export interface Root {
  address: Address;
  age: number;
  email: null;
  id: string;
  name: string;
  posts: PostsItem[];
  tags: string[];
}

브라우저 안에서만 처리됩니다. 네트워크 전송 없음.

언제 쓰나

API 명세 없이 응답 샘플 한 덩어리만 받았을 때, Postman 결과를 곧장 TypeScript 타입으로 옮기고 싶을 때. 직접 손으로 옮기면 빠뜨리는 필드가 늘 한두 개 생기는데, 자동 추출은 그걸 막아 줍니다.

추론 규칙

  • 객체 — 각 필드별 타입을 재귀적으로 추론. 같은 shape 의 객체는 자동으로 재사용.
  • 배열 — 모든 원소 타입을 union 으로 합칩니다. 빈 배열은 unknown[].
  • null — 기본은 T | null. null 을 optional 로 옵션을 켜면 field?: T 형식으로 변환.
  • 원시 타입 — string · number · boolean.

옵션

  • 루트 인터페이스 이름 — 기본 Root. 원하는 이름으로 변경 가능.
  • export 추가export interface ... 로 시작.
  • null 을 optional 로 — null 가능 필드를 ? 로 표현 (Strict null checks 환경에서 가독성).

한계

  • 같은 필드의 다른 호출 응답에서 타입이 바뀌는 경우는 추론 불가. 두 샘플을 합쳐 union 으로 만들고 싶다면 수동 후처리 필요.
  • 함수·심볼·BigInt 같은 JSON 외 타입은 다루지 않습니다.

API schema 추론 — 응답 노출 0

JSON.parse + recursive type-builder 모두 자체 구현. 같은 shape 객체는 자동 재사용 (interface dedup). API 응답 샘플을 입력해도 외부로 가지 않습니다.

자주 묻는 질문

복잡한 중첩 JSON 도 변환되나요?
네. 재귀 추론으로 임의 깊이 중첩 객체·배열 모두 처리. 같은 shape 의 객체가 여러 곳에 나오면 동일 interface 를 자동 재사용해 중복 정의를 막습니다.
null 값은 어떻게 추론되나요?
기본은 `T | null` union. '옵셔널' 토글을 켜면 `T?` 형태 (optional property) 로 변환. API 의 nullable vs missing 차이에 따라 선택.
TypeScript interface 와 type alias 중 무엇을 쓰나요?
interface 키워드 사용 — extends · declaration merging 친화. type alias 가 필요하면 출력에서 `interface` → `type` 으로 직접 바꾸면 됩니다.