타입스크립트 사용자 정의 타입 가드 예제
타입스크립트( Typescript )의 사용자 정의 타입 가드(User-Defined Type Guard)는 개발자가 직접 작성한 조건을 이용하여 특정 값의 타입을 판별하고, 그 결과를 타입스크립트 컴파일러가 이해할 수 있도록 만드는 기능이다.
타입스크립트에서는 하나의 값이 여러 타입 중 하나가 될 수 있는 유니온 타입을 자주 사용한다.
프로그램이 현재 값의 정확한 타입을 확인하지 않은 상태에서 특정 타입에만 존재하는 속성이나 기능을 사용하면 오류가 발생할 수 있다.
사용자 정의 타입 가드는 이러한 상황에서 값의 실제 타입을 명확하게 하는 역할을 한다.
이 함수는 전달받은 객체의 특정 속성 존재 여부, 속성값, 자료형 등의 조건을 검사하여 해당 값이 원하는 타입인지 판단한다.
판별 결과가 참이면 타입스크립트는 이후 처리 영역에서 해당 값을 지정된 타입으로 인식한다.
사용자 정보를 나타내는 일반 사용자 타입과 관리자 타입이 함께 사용되는 경우, 관리자에게만 존재하는 권한 관련 속성을 검사하여 관리자 여부를 판단하는 타입 가드를 만들 수 있다.
판별 결과가 관리자라면 이후 코드에서는 관리자 전용 속성을 안전하게 사용할 수 있다.
사용자 정의 타입 가드의 핵심 목적은 타입 판별, 타입 좁히기, 타입 안정성 향상이다.
여러 객체 타입을 함께 사용하는 프로그램, API 응답 데이터 처리, 사용자 권한 구분, 다양한 상태 객체 처리 등에 유용하다.
사용자 정의 타입 가드는 개발자가 프로그램의 데이터 구조에 맞는 판별 기준을 직접 정의하여 타입스크립트가 보다 정확하게 타입을 추론하도록 돕는 기능이다.
사용자 정의 타입 가드를 활용하면 불필요한 타입 단언을 줄이고 런타임 오류 가능성을 낮추면서 더욱 안전하고 명확한 프로그램을 작성할 수 있다.
⊙
function printValue(value: string | number) {
if (typeof value === "string") {
console.log(value.toUpperCase());
} else {
console.log(value.toFixed(2));
}
}⊙
function isType(value: SomeType): value is TargetType {
return 조건식;
}⊙
value is TargetType⊙
interface Admin {
role: "admin";
name: string;
permissions: string[];
}
interface Customer {
role: "customer";
name: string;
points: number;
}
type User = Admin | Customer;⊙
function isAdmin(user: User): user is Admin {
return user.role === "admin";
}⊙
function printUser(user: User) {
if (isAdmin(user)) {
console.log(user.permissions);
} else {
console.log(user.points);
}
}
댓글
댓글 쓰기