더북(TheBook)

paramMoney인지 Liter인지 판단하는 isMoney 함수를 만들어서 if문 안에서 호출했습니다. 논리적으로는 타입이 구분되어야 하지만, 타입스크립트는 타입을 구분하지 못하고 모두 Money | Liter라고 생각합니다. 이렇듯 if문에서 사용하는 함수를 직접 만들면 타입 좁히기가 정상 작동하지 않습니다. 이럴 때는 isMoney 함수에 특수한 작업을 해주어야 합니다.

function isMoney(param: Money | Liter): param is Money {
  if (param.__type === 'money') {
    return true;
  } else {
    return false;
  }
}
function moneyOrLiter(param: Money | Liter) {
  if (isMoney(param)) {
    param;
  } else {
    param;
  }
}
// (parameter) param: Money
// (parameter) param: Liter
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.