🖥️Frontend/TypeScript

[TypeScript] never

뉴발자 2023. 11. 9.
728x90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[TypeScript] never
TypeSciprt

 

 

never

Type은 가능한 값의 집합이다.

 

예를 들면 string 타입은 가능한 모든 문자열의 집합을 의미한다.

 

따라서 변수의 타입을 지정하면, 해당 변수는 오직 지정한 타입에 가능한 값만을 가질 수 있다.

 

TypeScript에서 never 타입은 값의 공집합이다.

그래서 never를 TypeScript의 바닥타입이라고 부르기도 한다.

 

집합에 어떤 값도 없기 때문에 never 타입은 any 타입의 값을 포함해 어떤 값도 가질 수 없다.

 

 

type IsNever<T> = T extends never ? true : false;

type A = IsNever<never>;
type B = IsNever<boolean>;

 

위 코드에서 Type A는 true, Type B는 false를 반환할 것 같지만 그렇지 않다.

 

코드를 직접 작성해서 확인해보면 A는 never를 반환한다.

 

그 이유는 위에서 언급한 것처럼 never가 공집합이기 때문이다.

 

일반적으로 type 매개변수와 union이 만나면 분배 법칙이 실행된다.

 

하지만 never는 empty union 이기 때문에 분배 법칙이 실행되지 않고 never를 반환하게 된다.

 

 

원하는 결과를 얻기 위해선 아래의 코드처럼 튜플을 사용해서 작성해주면 된다.

type IsNever<T> = [T] extends [never] ? true : false;

 

 

또한 아래의 코드처럼 작성할 수 있다.

type IsNever<T> = { type: T } extends { type: never } ? true : false;

 

 

never와 void

 

그렇다면 공집합인 never와 빈 값을 반환하는 void 타입에 혼동이 올 수 있다.

하지만 이 둘은 완전히 다른 타입이다.

 

void를 반환하는 함수는 반환 값이 없는 것처럼 보이지만, 실은 자체적으로 컴파일러가 undefined를 return 하도록 되어있다.

 

즉, void 타입에는 undefined 값이 할당될 수 있는 것이다.

 

반면 never는 앞서 언급했듯이 공집합이다.

 

따라서, undefined 조차도 할당이 불가능하고, 함수의 경우에는 아예 반환이 불가능하다.

 

 

참고 사이트

https://one-armed-boy.tistory.com/entry/TypeScript-%ED%83%80%EC%9E%85-any-unknown-never

 

TypeScript 타입: any, unknown, never

TypeScript에서 타입들은 특정 변수가 가질 수 있는 값의 범위로 볼 수 있다. TypeScript에는 다양한 타입들이 존재하는데, 이번 글에서는 그 중 any, unknown, never에 대해 다뤄보려고 한다. Type: any any 타...

one-armed-boy.tistory.com

 

 

 

 

 

 

 

 

 

 

 

728x90

'🖥️Frontend > TypeScript' 카테고리의 다른 글

[TypeScript] 공변성, 반공변성  (1) 2023.11.13

댓글