<aside> 💡 목차

</aside>

1. 타입 가드의 정의 및 사용법

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

2. is 키워드와 타입 가드 함수 작성 방법

// 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); // 새가 하늘을 날고 있습니다.

type-guardtypescript타입가드타입스크립트