[Typescript] void와 never 타입

Narcoker·2025년 3월 18일

Typescript

목록 보기
5/15

void

아무 것도 없음을 의마하는 타입

void 타입에는 오직 undefined만 할당할 수 있다.

function fun1(): string{
	return "hello";
}

// return 값이 없으면 undefined를 반환한다.
function fun2(): void {
	console.log("hello");
}

let a: void;
a = undefined; 
a = null; // tsconfig.json 의 complierOptions에서 "strictNullChecks"를 false로 지정한 경우 가능

// a = 1; // 불가능
// a = "hello"; // 불가능 
// a = {} // 불가능

null이 있는데 void 가 필요한 이유

fun2() 함수에 작성한 주석처럼,
함수에 return 를 정의하지 않으면 undefined가 반환된다.

그러나 다음과 같이 함수 반환 타입에 undefined를 지정하면 에러를 반환한다.
함수 반환 타입을 지정하면 반드시 return 문과 함께 해당 타입을 반환해한다.

// return 값이 없으면 undefined를 반환한다.
function fun1(): void {
	console.log("hello");
}

// 자바스크립트에서 undefined를 반환시켜주더라도
// 반환 타입을 지정한 경우 반드시 해당 타입의 return문이 있어야한다.

// 에러 발생
// TS를 JS로 변환후 실행 하면 암묵적 타입 반환으로 인해 실행되기도 함
function fun2(): undefined {
	console.log("hello");
}

// 에러 발생 안함: 반환 타입 지정 및 해당 타입 반환
function fun3(): undefined {
	console.log("return undefined");
  	return undefined;
}

// 에러 발생 안함: 반환 타입 지정 및 해당 타입 반환
function fun4(): null {
	console.log("return null");
  	return null;
}

never

존재하지 않는, 불가능한 타입을 정의하는 문법

예를 들어 무한 루프가 도는 함수의 경우, 반환값 자체가 있는 상황이 모순이다.
그러한 경우에 never 타입을 사용한다.

never 타입은 "strictNullCheck" 가 false 여도
null 값을 담을 수도, 할당할 수도 없다.

function fun1(): never{
  while(true){
    // ... do something
  }
}

// 반드시 에러를 반환하는 함수이기 때문에 반환값 자체가 있으면 안된다.
function fun1(): never{
  throw new Error();
}

출처

인프런 - 한 입 크기로 잘라먹는 타입스크립트

profile
열정, 끈기, 집념의 Frontend Developer

0개의 댓글