코딩애플 Typescript - 함수에 사용하는 never 타입도 있긴 합니다

김원종·2024년 4월 15일
0

TypeScript 학습

목록 보기
15/28
post-thumbnail

사용 빈도는 적지만 Never type 을 알아보자.
function에 붙이는 return type으로 사용가능하다. 근데 좀 특이하다.

function 함수() :never{

}

어떤 함수가 있을때 아래 조건을 만족해야한다.
조건1 ) 절대 return을 하지 않아야 한다.
조건2 ) 함수 실행이 끝나지 않아야 합니다. (전문용어로 endpoint가 없어야한다.)
이런 함수에 붙일 수 있는 타입이다. 실은 조건 1,2,는 같은 소리인데 모든 자바스크립트 함수 맨 밑엔 return undefined 라는 숨겨진 코드를 가지고 있다. 그래서 조건 2가 맞으면 1도 맞게된다.

위 코드는 강제로 에러를 발생시키는 코드이다. 위 코드를 입력하면 코드 실행이 중단되는 것이다. 그럼 코드실행이 중단되니 함수가 끝나지 않는다고 보면 된다.
즉 endpoint가 없는 함수라는 것이다.

혹은 위처럼 while문을 넣어주는것이다 . 강제로 조건을 true로 설정하면 내부 코드를 무한히 반복하기 때문에 함수가 종료되지 않는다.

이런 never 타입은 사실상 사용할곳이 없다. void 타입을 사용하면 return값 안보내도록 할수 있기때문에 굳이 never타입을 사용할 일은 없다.

그렇다면 이렇게 never타입을 알아야하는 이유가 뭘까? never타입은 코드를 이상하게 구성하면 나타난다. 즉 뭔가 이상한 narrowing일때 경우이다.

경우 1 )

위처럼 parameter의 값이 무조건 string만 들어오는 경우를 보자 . 굳이 if문을 써서 narrowing을 해줄 필요가 있나? 무조건 string만 들어오는 상황인데 근데 이런 상황에서 if 문말고 또 else문을 사용하게 되면 parameter의 타입이 never로 바뀐걸 볼수있다. 여기서 등장하는 never는 있을수 없다 라는 뜻이다. 즉 그럴일이 없다 라는 뜻으로 이해하자.애초에 string만들어오니 else문으로 갈일이 없다고 생각하자. 그런뜻의 never로 이해하자!

경우 2)

이렇게 표현식으로 함수를 작성하고 에러를 발생시키면 never타입을 리턴한다고 나온다.

그러니 여기서도 알수있듯이 never타입은 그럴일이 없다 , 뭔가가 이상하다 라는 신호로 생각하자. 만약 never타입이 등장하면 이유를 생각할수 있어야한다.

profile
개린이

0개의 댓글