/ TYPESCRIPT

TypeScript - never타입?

TypeScript은 다음과 같이 구성되어 있습니다.

never타입?

타입에는 never타입이라는 것도 있습니다. 함수에 붙이는데, 조건이 있습니다.

  1. return을 하면 안됩니다.
  2. 함수의 실행이 종료되면 안됩니다.

    이런 조건을 가진 함수에 붙일 수 있는 타입이 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.