TypeScript - never타입?
TypeScript은 다음과 같이 구성되어 있습니다.
- TypeScript란?
- TypeScript - 기본 타입 작성법
- TypeScript - Union Type, any, unknown
- Type Narrowing
- Type 키워드로 타입을 변수에 담기
- as const에 대해
- TypeScript - interface에 대해
- TypeScript - never타입?
- TypeScript - tuple타입?
never타입?
타입에는 never타입이라는 것도 있습니다.
함수에 붙이는데, 조건이 있습니다.
- return을 하면 안됩니다.
- 함수의 실행이 종료되면 안됩니다.
이런 조건을 가진 함수에 붙일 수 있는 타입이 never타입입니다. 기본적으로 자바스크립트 함수 맨 마지막에는 “return undefined”가 숨겨져있습니다. 따라서 2번조건이 맞는다면 1번도 자동으로 조건이 성립됩니다.
function fun() {
console.log("hi");
}
위의 예시는 return을 하지 않았지만, console.log()로 출력한 이후 함수의 실행이 종료되버리기 때문에 never타입을 쓸 수 없는 것이죠.
그러면 도대체 어디에 쓸 수 있을까요?
예를 들면 무한반복문일 경우나 에러를 발생시키는 함수가 있습니다.
아래와 같이 말이죠.
function fun1() {
while(true) {
console.log("hi");
}
}
function fuc2() {
throw new Error("에러");
}
사실 never타입은 거의 사용할 일이 없습니다. return을 하고 싶지 않다면 void타입을 사용하면 됩니다.
function fun(param : string) {
if (typeof param === "string") {
console.log(param);
} else {
console.log(param);
}
}
위는 never타입이 나타나는 예시를 든 것입니다. fun()의 파라미터인 param의 타입은 “string”으로 지정했는데도 불구하고 narrowing을 사용하여 param이 string타입일 경우와 그렇지 않은 경우를 나누어서 코드를 작성했습니다. param이라는 파라미터는 이미 string으로 지정했음에도 굳이 narrowing을 할 필요가 없죠. else안에 param은 never타입이 되있을 것입니다.
// 함수선언식
function 함수1() {
throw new Error()
}
//함수표현식
let 함수2 = function () {
throw new Error()
}
또 다른 예시입니다. 함수1()은 함수선언식으로 작성했고 함수2()는 함수표현식으로 작성했습니다. 함수1의 경우는 void타입이고, 함수2는 never타입으로 나타나게 됩니다.
이번 글에서는 never타입에 대해서 알아보았습니다. 크게 사용할 일은 없겠지만 알아두면 괜찮을 것입니다.
End.