TypeScript 타입가드란?
타입가드(Type Guard)는 런타임에 값의 타입을 좁혀(narrowing) 컴파일러가 타입 안전하게 추론할 수 있도록 돕는 함수입니다. TypeScript에서 가장 흔한 패턴은 value is Type 형태의 반환 타입을 가진 함수입니다. 이 도구는 인터페이스나 타입 별칭을 입력받아 자동으로 타입가드 함수를 생성하므로, 외부 API 응답이나 사용자 입력처럼 신뢰할 수 없는 데이터의 형태를 안전하게 검증할 수 있습니다.
또한 asserts 키워드를 사용하는 단언 함수는 검증에 실패하면 예외를 던지고, 성공하면 호출자 스코프에서 타입이 좁혀지는 특별한 형태입니다. 본 도구는 is·asserts 두 패턴, Zod 스키마, 단위 테스트까지 한 번에 출력합니다.
지원하는 타입 패턴
- 기본 타입:
string,number,boolean,null,undefined - 배열:
T[],Array<T>— 원소 타입까지 재귀 검증 - 유니온 리터럴:
'admin' | 'user' - 선택 속성:
email?: string— undefined 허용 - 중첩 객체: 내부 인터페이스도 자동 분해
자주 묻는 질문 (FAQ)
Q. 생성된 타입가드를 어디에 써야 하나요?
A. fetch 응답의 res.json() 결과는 any로 들어옵니다. 이를 if (isUser(data)) 블록으로 감싸면 그 내부에서는 data가 안전하게 User 타입으로 추론됩니다.
Q. Zod와 직접 작성한 타입가드 중 어떤 게 좋나요?
A. Zod는 의존성이 추가되는 대신 스키마·파싱·에러 메시지·변환을 한 번에 처리합니다. 외부 라이브러리를 피하고 싶다면 본 도구가 만드는 순수 TypeScript 타입가드가 가장 가볍습니다.
Q. is와 asserts의 차이는?
A. is는 boolean을 반환하므로 if·filter 등 분기에 쓰입니다. asserts는 호출 후 코드부터 타입이 좁혀지므로 가드 절(early throw) 스타일에 적합합니다.