never는 절대 발생할 수 없는 값을 나타내는 타입
함수가 값을 반환하지 않고 항상 예외를 던지거나 무한 루프를 도는 경우, 그 반환 타입은 never
never는 bottom type 이라고도 불리며 모든 타입의 하위 타입
ex
function throwError(message:string):never {
throw new Error(message);
}
이 함수는 어떤 값도 반환하지 않고, 실행될 경우 예외를 던져서 never 반환 타입 가짐
이외에도 if-else, switch문을 통한 타입 검사 과정에서 허용된 케이스에 포함되지 않은 경우 대응하기 위해 never 사용
unknown
알 수 없는 값을 나타내는 타입
외부 API 호출 결과와 같이 구체적인 타입을 미리 알 수 없고, 런타임에 타입이 결정되는 경우 사용
any와 비슷하지만 더 안전한 방식
any는 어떤 값이든 허용하기 때문에 타입 안정성 떨어지지만,
unknown은 특정한 타입으로 사용하려면 타입을 좁혀야 함
unknown은 any와 함께 top type으로 불리며 모든 타입의 상위 타입
ex
function processUnknownValue(value: unknown){
if(typeof value === 'string'){
//
}else if(typeof value === 'number'){
//
}else {
//
}
}
이처럼 unknown은 직접 타입을 강제할 수 없으며, 타입을 좁혀야 사용할 수 있다는 점에서 any보단 안전한 선택
이러면 예상치 못한 타입 오류 방지할 수 있음
void는 함수가 명시적으로 값을 반환하지 않음을 의미
never타입은 아예 반환될 수 없는 상태
ex - void는 반환값 없이 return; 하는 함수에서 사용될 수 있지만,
never는 예외를 던지거나 무한루프에 빠지는 함수에만 적용될 수 있음
즉,
void는 정상적인 종료를
never는 실행이 끝날 수 없는 함수에 적용되는 타입