let pet = getSmallPet();
// 이렇게 각 프로퍼티들에 접근하는 것은 오류를 발생시킵니다
if (pet.swim) {
pet.swim();
}
else if (pet.fly) {
pet.fly();
}
function isFish(pet: Fish | Bird): pet is Fish {
return (pet as Fish).swim !== undefined;
}
pet is Fish는 이 예제에서의 타입 서술어입니다. 서술어는 parameterName is Type 형태이고, parameterName는 반드시 현재 함수 시그니처의 매개변수 이름이어야 합니다.
isFish가 변수와 함께 호출될 때마다, TypeScript는 기존 타입과 호환된다면 그 변수를 특정 타입으로 제한할 것입니다.
// 이제 'swim'과 'fly'에 대한 모든 호출은 허용됩니다
if (isFish(pet)) {
pet.swim();
}
else {
pet.fly();
}
타입 assertion을 사용하면 as를 남발하게 된다.
이 경우 type 검사하는 의미가 떨어지게 되므로
type guard를 사용하도록 하자.
출처 https://typescript-kr.github.io/pages/advanced-types.html