타입 가드는 런타임 검사를 통해 특정 스코프 내에서 타입을 좁히는 표현식입니다. TypeScript 컴파일러가 타입 가드를 인식하면 해당 블록 내에서 더 구체적인 타입으로 추론합니다. 내장 타입 가드로
typeof, instanceof, in 연산자가 있으며, 사용자 정의 타입 가드는 is 키워드로 만듭니다.타입 가드는 런타임 검사를 통해 TypeScript가 특정 스코프 내에서 타입을 더 구체적으로 추론하도록 합니다.
TypeScript는 typeof, instanceof, in 연산자를 타입 가드로 인식합니다. 더 복잡한 타입 구분이 필요할 때는 is 키워드를 사용한 사용자 정의 타입 가드를 만들 수 있으며, Discriminated Union 패턴으로 안전한 분기 처리가 가능합니다.
각 타입 가드를 선택하고 실행하여 타입이 어떻게 좁혀지는지 확인하세요.
function format(value: string | number): string {
if (typeof value === "string") {
// value: string ← 타입 좁히기
return value.toUpperCase();
}
// value: number
return value.toFixed(2);
}
format("hello"); // "HELLO"
format(3.14159); // "3.14"실제 코드로 동작 원리를 확인하세요.
// typeof: 원시 타입 구분
function processValue(value: string | number | boolean) {
if (typeof value === "string") {
return value.trim(); // value: string
}
if (typeof value === "number") {
return value.toFixed(2); // value: number
}
return value ? "Yes" : "No"; // value: boolean
}
// instanceof: 클래스 인스턴스 구분
function handleError(error: Error | TypeError | RangeError) {
if (error instanceof TypeError) {
console.log("타입 에러:", error.message);
} else if (error instanceof RangeError) {
console.log("범위 에러:", error.message);
} else {
console.log("일반 에러:", error.message);
}
}typeof, instanceof, in 연산자가 있으며, 사용자 정의 타입 가드는 is 키워드로 만듭니다.typeof나 instanceof로 판별할 수 없는 복잡한 타입 구분이 필요할 때 사용합니다. 반환 타입을 paramName is Type 형태로 선언하면, 해당 함수가 true를 반환할 때 TypeScript가 타입을 좁힙니다. 특히 Array.filter()와 함께 사용하면 필터링 결과의 타입이 자동으로 좁혀져 유용합니다.switch 문에서 판별자를 기준으로 분기하면 각 케이스에서 타입이 자동으로 좁혀집니다. Redux의 action.type이 대표적인 예입니다. never 타입을 활용한 완전성 검사(exhaustiveness check)로 모든 케이스를 처리했는지 컴파일 타임에 확인할 수 있습니다.