param이 Money인지 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