void
타입은 아무런 값도 없음을 의미하는 타입으로,
보통은 다음과 같이 아무런 값도 반환하지 않는 함수의 반환값 타입을 정의할 때 사용한다.
// 아무런 값도 반환하지 않는 void 타입
function func2(): void {
console.log("hello");
}
// func1의 함수의 반환값은 string 타입
function func1(): string {
return "hello";
}
변수에도 void
타입을 지정할 수 있는데, void
타입의 변수에는 undefined
이외의 다른 타입의 값은 담을 수 없다.
하지만, 아래와 같이 tsconfig.json
에 strictNullChecks
(업격한 null 검사) 옵션을 false
로 설정하면 void
타입의 변수에 null
값도 담을 수 있게 된다.
never
타입은 불가능을 의미하는 타입으로, 보통 다음과 같이 함수가 어떠한 값도 반환할 수 없는 상황일 때 해당 함수의 반환값 타입을 정의할 때 사용된다.
function func3(): never {
while (true) {}
}
위 코드에서 함수 func3
는 무한루프를 돌기 때문에 아무런 값도 반환할 수 없다.
영원히 종료될 수 없기 때문에 뭔가를 반환한다는 것 자체가 불가능하다.
function func3(): never {
throw new Error();
}
위 코드와 같이 의도적으로 오류를 발생시키는 함수도 never
타입으로 변환값 타입을 정의할 수 있다.
또한, 변수의 타입을 never
로 정의한다면 any
를 포함해 그 어떠한 값도 이 변수에 담을 수 없게된다.
이 때 strictNullChecks
옵션을 false
로 해도 null
값을 담을 수 없다.