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 | 값 자체가 없음 |
| 타입 계층 | 일반 타입 | 모든 타입의 하위 타입 |
반응형