[TS series ] TS 기본문법 #3

_sqrlkoo·2022년 12월 8일
0

TypeScript

목록 보기
3/12
post-thumbnail

Void type

  • void type은 변수가 아닌 함수에서 주로 사용하고 아주 드물게 사용됩니다.

    물론 일반 타입 변수로 선언할 수 있으나, 해당 변수에는 undefined만 할당할 수 있기 때문에 사용 하지 않습니다 !
  • 아무것도 반환하지 않은 함수의 반환타입으로 사용합니다.

    아무것도 반환하지 않은 함수 ?

    어떠한 return값을 반환하지 않습니다. 오직 undefined만 반환합니다.
    코드로 예시를 보겠습니다.
function test(x: number): void {
	return x * 2;
}

test(2); // error

function test(): void {
	return undefined;
}

test(); // undefined를 반환하기 때문에 에러가 나지 않습니다!

아직 이해가 되지않아도 괜찮습니다!
이후에 나올 never타입과 같이 다시 정리해 보겠습니다! 😋

❓ 그럼 어떤 용도로 사용할까 ❓

이 함수에서 뭔가를 return 하려고 할 때 에러를 내거나,

함수에 return 방지장치를 주고 싶을 때 void 타입을 활용합니다.

function add (co:string): void{
  return undefined;
}
// undefined

function add (co:string): void{
  return co ;
}
// error

Never type

never type은 흔하게 사용되는 건 아니지만 어떻게 작동하고 무엇인지 아는게 중요합니다 !

never type을 완전히 이해하기 위해서는 "타입"이 무엇이고 시스테에서 어던 역할을 하는지 먼저 알아야 합니다.

타입은 가능한 값의 집합입니다.

예를 들어, string type은 무한히 가능한 모든 문자열의 집합을 의미합니다. 그래서 변수의 탑이르 string으로 지정하면, 해당 변수는 오직 가능한 집합 내의 값만을 가질 수 있습니다.

타입스크립트에서 never type은 값의 공집합입니다.
*공집합이란 원소가 하나도 없는 집합을 말합니다.

집합에 어떤 값도 없기 때문에, never type은 any type의 값을 포함해 어떤 값도 가질 수 없습니다.
그래서 never type은 때때로 점유할 수 없는 또는 바닥 타입이라고 불립니다.

❓ 그럼 어떤 용도로 사용할까 ❓

  • 숫자 체계에서 아무것도 없는 양을 나타내는 0처럼 문자 체계에도 불가능을 나타내는 타입이 필요합니다.

  • 함수의 반환 타입으로 쓰이는 경우

  • 절대 반환되지 않아야 할 함수를 애너테이션 처리할 때 쓰이는 경우

예를 들어, 허용할 수 없는 함수 매개변수에 제한을 가합니다. (never type을 이용해 다양한 사용 사례에 놓인 함수에 제한을 걸 수 있습니다.)

function unknownColor(x: never): never {
    throw new Error("unknown color");
}


type Color = 'red' | 'green' | 'blue'

function getColorName(c: Color): string {
    switch(c) {
        case 'red':
            return 'is red';
        case 'green':
            return 'is green';
        default:
            return unknownColor(c); 
        // 'string' 타입은 'never' 타입에 할당할 수 없음
    }
}

마지막으로 void type과 never type에 대해서 비교하면서 마무리 하겠습니다!

void type은 아무것도 반환하지 않은 경우 함수의 백그라운드에서 undefined 상태로 반환합니다.

never type은 아무것도 반환하면 안된다는 것을 나타내기 위해 사용하고 이 함수는 일반적으로 예외를 발생시키는 함수가 될 것입니다!

그래서, 아무것도 반환할 일이 없거나 어떤 루프에서 연속적으로 실행되는 함수입니다.

void처럼 undefined을 반환한 것과는 다릅니다! 절대 ! 아무것도 반환할 것이 없어야 합니다 !


총정리 ❗️

never type 과 void type을 비교하면 void는 엄밀히 말해서 값 입니다.

void를 반환한 함수죠 undefined 상태로 반환됩니다.

void는 신경 쓸 필요 없는 것을 반환합니다, 반면에 never은 이 함수가 절대 반환할 기회를 가지면 안된다고 합니다.

이것이 가장 큰 차이점 입니다.

0개의 댓글