param은 string 아니면 number인데 else문에서는 string도 number도 아닌 상태가 되어버립니다. 사실상 else문이 실행될 일은 없기에 param은 never로 추론되고, param과 관련한 작업을 할 수 없게 됩니다.
드물지만 never를 직접 써야 할 상황도 있습니다.
function neverFunc1(): never {
throw new Error('에러');
}
function infinite(): never {
while (true) {
console.log('무한 반복됩니다');
}
}
함수 선언문에서는 반환값 타입이 void로 추론되므로 never로 직접 표기하면 됩니다.
타입스크립트 설정에 따라 배열에서 never를 보는 경우도 있습니다. TS Config 메뉴에서 noImplicitAny를 체크 해제하면 배열이 any[]에서 never[]가 됩니다. noImplicitAny 체크박스는 이름 그대로 implicitAny 에러를 검사할지 결정하는 옵션입니다.