else문에서 타입이 never가 되는 것에 주목하세요. param은 string 또는 number 타입인데 else문에서는 string도 number도 아니므로 never가 됩니다. 이렇게 타입스크립트가 코드를 파악해서 타입을 추론하는 것을 제어 흐름 분석(Control Flow Analysis)이라고 부릅니다. 다만 제어 흐름 분석이 완벽하지는 않다는 것을 염두에 두고 활용해야 합니다.
항상 typeof를 사용할 수 있는 것은 아닙니다. 따라서 다양한 타입 좁히기 방법을 알아두어야 합니다. 먼저 null과 undefined를 구분해봅시다.
function strOrNullOrUndefined(param: string | null | undefined) {
if (typeof param === 'undefined') {
param;
} else if (param) {
param;
} else {
param;
}
}
// (parameter) param: undefined
// (parameter) param: string
// (parameter) param: string | null