
아무 것도 없음을 의마하는 타입
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 = {} // 불가능
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 타입은 "strictNullCheck" 가 false 여도
null 값을 담을 수도, 할당할 수도 없다.
function fun1(): never{
while(true){
// ... do something
}
}
// 반드시 에러를 반환하는 함수이기 때문에 반환값 자체가 있으면 안된다.
function fun1(): never{
throw new Error();
}