~ / developer / json-to-typescript

🟦 JSON → TypeScript 변환기

JSON 샘플을 붙여 넣으면 TypeScript interface·type으로 바꿔 줘요. 중첩 객체와 배열을 합쳐 옵션 속성까지 만들어요.

TypeScript
광고

사용법

  1. 왼쪽 칸에 변환할 JSON을 붙여 넣어요. API 응답 한 건을 그대로 복사해도 돼요. 처음에는 예시 JSON이 들어 있어서 바로 결과를 볼 수 있어요.
  2. 아래 옵션에서 interface와 type 중 하나를 고르고, export를 붙일지, 속성을 readonly로 만들지, 맨 위 타입의 루트 이름을 정해요.
  3. 오른쪽 칸에 타입이 바로 나와요. copy를 눌러 프로젝트의 타입 파일에 붙여 넣으세요. JSON에 오류가 있으면 오류 메시지가 표시돼요.

변환 규칙

JSON 값TypeScript 타입예시
문자열, 숫자, true/falsestring, number, boolean"a" → string
nullnull값이 null뿐이면 null로 표시. 다른 샘플에 값이 있으면 합쳐서 string | null이 돼요
배열요소 타입[ ]["x","y"] → string[], 빈 배열은 unknown[]
섞인 배열유니온 배열[1, "x"] → (number | string)[]
중첩 객체별도 interface키 이름을 PascalCase로 바꿔 타입 이름으로 써요. 배열 키는 끝의 s를 떼요(orders → Order)
배열 안 객체들의 키 차이옵션 속성(?)일부 요소에만 있는 키는 coupon?: string

예시: 주문 JSON을 타입으로

interface Root {
  id: number;
  name: string;
  active: boolean;
  profile: Profile;
  orders: Order[];
}

interface Profile {
  age: number;
  email: null;
}

interface Order {
  no: string;
  price: number;
  coupon?: string;
}

두 번째 주문에는 coupon이 없어서 옵션 속성이 됐어요. 위 결과는 이 페이지의 변환 코드를 node로 직접 돌려 확인한 값이에요(내보내기·루트 이름 옵션만 다름). 샘플에서 email이 null 하나뿐이라 타입이 null로 나왔는데, 실제로는 문자열이 들어올 수 있다면 string | null로 고쳐야 해요. 샘플 JSON이 모든 경우를 담지 못하기 때문이에요.

자동 변환 결과를 쓸 때 확인할 것

interface와 type, 뭘 고르나요

객체 모양을 나타낼 때는 둘 다 쓸 수 있어요. interface는 같은 이름을 다시 선언해 확장할 수 있고 상속(extends)이 자연스러워요. type은 유니온이나 튜플 같은 다른 타입 표현과 함께 쓰기 좋고요. 프로젝트의 규칙이 있다면 그것을 따르고, 없다면 API 응답처럼 객체 모양만 나타낼 때는 interface로 시작해도 충분해요. 이 도구는 두 방식 중 고른 대로 모든 객체 타입을 만들어요.

개인정보와 처리 방식

변환은 모두 브라우저 안의 자바스크립트로 하고, 붙여 넣은 JSON은 서버로 전송되지 않아요. 토큰이나 개인정보가 섞인 응답이라면 값을 지우고 구조만 남겨서 붙여 넣는 습관을 들이는 편이 안전해요. JSON 문법을 먼저 점검하려면 JSON 검사기, 보기 좋게 정리하려면 JSON 포매터, 설정 파일을 바꾸려면 YAML ↔ JSON 변환기를 함께 쓰세요.

이 도구가 하지 않는 것

JSON 스키마 검증, 열거형(enum)·리터럴 타입 추정, 날짜·UUID 같은 형식 판별, 주석 달기는 하지 않아요. JSON에는 타입 정보가 없어서 값에서 알 수 있는 기본 타입(string, number, boolean, null, 배열, 객체)만 추정해요. 결과는 출발점으로 쓰고, 실제 API 문서와 비교해 다듬어 쓰세요. 큰 정수나 소수의 정밀도 문제는 JSON.parse를 쓰기 때문에 자바스크립트 숫자 범위를 따라요.

자주 묻는 질문

JSON의 null은 어떤 타입이 되나요?
값이 null뿐이면 null 타입으로 나와요. 같은 키에 문자열이 들어오는 샘플이 하나라도 있으면 string | null로 합쳐져요. 실제 API가 null을 줄 수 있다면 직접 | null을 붙여 주세요.
배열 요소의 모양이 서로 다르면요?
객체끼리는 키를 합치고 일부에만 있는 키는 옵션(?)으로 표시해요. 원시 타입이 섞이면 유니온으로 묶어요. 모든 요소가 같은 모양이면 하나의 interface로 나와요.
빈 배열은 어떻게 되나요?
요소를 알 수 없어 unknown[]으로 나와요. 같은 키의 다른 샘플에 값이 있는 배열이 있으면 그 타입을 써요. 없다면 any 대신 직접 타입을 적어 주세요.
interface와 type 중 무엇을 고를까요?
객체 모양만 나타낼 때는 어느 쪽이든 쓸 수 있어요. 프로젝트 규칙이 있으면 따르고, 없다면 interface로 시작해도 충분해요.
입력한 JSON이 서버로 보내지나요?
아니요. 변환은 브라우저 안에서만 이루어져요. 그래도 토큰이나 개인정보는 지우고 구조만 남겨 쓰는 것이 안전해요.

이 도구와 함께 보면 좋은 글

관련 도구

더 둘러보기

💻 개발자 다른 도구

🔥 많이 찾는 도구

🔮 재미로 한 번 더

📝 읽어 볼 만한 글

글 전체 보기 →