본문 바로가기

프로그래밍기초/typescript

#08 TypeScript - Void와 Never 타입

void

void는 값이 없음을 의미하는 타입이다.

주로 함수가 정상적으로 종료되지만, 반환값이 없을 때 사용된다.

 

특징

- 반환값을 사용하지 않음을 명시

- undefined만 암묵적으로 허용

- 함수의 반환 타입으로 가장 많이 사용됨

function logMessage(message: string): void {
  console.log(message);
}

 

 

let value: void;
value = undefined; // 가능

 

value = null; // strictNullChecks=true 이면 ❌

 

 

- “이 함수는 결과값을 기대하지 않는다”는 의도를 명확히 표현

- 사이드 이펙트 중심 함수 표현

 

 

Never

never는 절대 발생하지 않는 값의 타입이다. 즉, 함수가 정상적으로 끝날 수 없는 경우를 의미한다.

 

특징

- 반환 자체가 불가능

- 모든 타입의 하위 타입

- 변수에 어떤 값도 할당 불가

- 컴파일러의 코드 분석(도달 불가능 코드)에 활용됨

 

function throwError(message: string): never {
  throw new Error(message);
}

 

항상 예외를 던지는 함수

 

function infiniteLoop(): never {
  while (true) {}
}

무한 루프

 

type Shape = 
  | { kind: "circle"; radius: number }
  | { kind: "square"; size: number };

function area(shape: Shape) {
  switch (shape.kind) {
    case "circle":
      return Math.PI * shape.radius ** 2;
    case "square":
      return shape.size ** 2;
    default:
      const _exhaustive: never = shape;
      return _exhaustive;
  }
}

Exhaustiveness Check

-> 새로운 타입이 추가되면 컴파일 에러로 누락을 감지할 수 있다.

 

void 와 never 비교

항목 void never
의미 반환값 없음 반환 자체 불가능
함수 종료 정상 종료 종료되지 않음
대표 사례 출력 함수 예외, 무한 루프
값 존재 여부 undefined 값 자체가 없음
타입 계층 일반 타입 모든 타입의 하위 타입

 

 

반응형