<aside> 💡 목차
</aside>
function isNumber(x: any): x is number {
return typeof x === 'number';
}
function double(x: any) {
if (isNumber(x)) {
console.log(x * 2);
} else {
console.log('Not a Number');
}
}
double(5); // 10
double('5'); // Not a Number
// Bird 인터페이스 정의
interface Bird {
fly: () => void;
layEggs: () => void;
}
// Fish 인터페이스 정의
interface Fish {
swim: () => void;
layEggs: () => void;
}
// 타입 가드 함수 정의: 입력된 pet이 Fish 타입인지 확인
function isFish(pet: Fish | Bird): pet is Fish {
return (pet as Fish).swim !== undefined;
}
// Fish 타입의 객체 생성
const pet1: Fish = {
swim: () => console.log('물고기가 헤엄칩니다.'),
layEggs: () => console.log('물고기가 알을 낳습니다.'),
};
// Bird 타입의 객체 생성
const pet2: Bird = {
fly: () => console.log('새가 하늘을 날고 있습니다.'),
layEggs: () => console.log('새가 알을 낳습니다.'),
};
// 타입에 따라 적절한 메서드를 호출하는 함수
function checkPet(pet: Fish | Bird) {
if (isFish(pet)) {
pet.swim();
} else {
pet.fly();
}
}
// checkPet 함수를 사용하여 pet1과 pet2에 대해 메서드 호출
checkPet(pet1); // 물고기가 헤엄칩니다.
checkPet(pet2); // 새가 하늘을 날고 있습니다.