샘플 여러 개로 타입의 누락을 줄이기
중첩 배열도 함께 분석합니다
[{"id":1,"profile":{"name":"민수"}},{"id":"guest","profile":{"name":"지수","age":20}}]에서 id는 number | string, profile.age는 누락된 샘플이 있으므로 기본 옵션에서 age?: number가 됩니다. 첫 번째 항목만 사용하는 대신 모든 샘플의 키와 자료형을 함께 봅니다.
배열 전체와 항목 타입을 구분하세요
루트가 배열이면 RootObject는 배열 타입 별칭으로 생성되고 객체 항목은 별도 정의로 생성됩니다. 객체·문자열·null이 섞인 배열도 각 종류를 보존합니다. 빈 배열은 항목 정보가 없으므로 unknown[]입니다. 실제로 빈 배열만 허용하는 튜플 []라는 뜻이 아닙니다.
optional, null, readonly의 의미
- 누락된 키만 optional: 하나라도 키가 없는 객체가 있으면
?를 붙입니다. 명시적으로 존재하는null은 별도 자료형으로 보존합니다. - 모든 키 optional: 부분 수정 요청 같은 초안을 만들 때 편리하지만 서버의 필수 조건까지 바꾸지 않습니다.
- readonly 속성: 객체 프로퍼티 재할당을 TypeScript에서 제한합니다. 런타임 객체 동결이나 배열 내부 변경 금지를 보장하지 않습니다.
생성 후 확인할 것
- 상태값처럼 정해진 문자열 집합은
string을 프로젝트의 리터럴 유니언으로 좁히세요. - 날짜와 UUID는 JSON 문자열이므로 자동으로 Date나 전용 타입이 되지 않습니다.
- API 문서로 필수 필드·null 가능성·오류 응답을 확인하고 프로젝트의 TypeScript 컴파일러로 검증하세요. 생성 타입은 런타임 검증기가 아닙니다.
타입 이름의 공백·기호는 제거하고 숫자로 시작하면 Type을 앞에 붙입니다. 같은 이름으로 정규화되는 중첩 구조에는 숫자 접미사를 붙여 충돌을 피합니다. interface 모드에서도 배열·원시값·유니언 루트는 type 별칭을 사용합니다.
데이터 처리와 문의
이 도구의 변환 코드는 입력·결과를 현재 탭에서 처리하며 서버로 보내거나 자동 저장하지 않습니다. 다운로드는 기기에 파일을 만들고, 복사는 클립보드에 기록합니다. 광고와 외부 라이브러리 요청에는 IP 주소·브라우저 정보가 전달될 수 있습니다. 실제 비밀번호·인증 토큰·고객 정보 대신 비식별 예제를 사용하세요.
오류 제보는 GitHub 문의 게시판(계정 필요)에 브라우저, 옵션, 민감한 값을 지운 재현 예제를 남겨 주세요. DevTool Hub · Google 외부 서비스 안내