8/17 타입스트립트 enum, union

낄낄박사·2024년 8월 17일

Gotcha

목록 보기
13/22

유니언 타입과 이넘(enum) 타입의 차이

유니언 타입

  • 유니언 타입은 단순히 리터럴 타입들(값)을 타입으로 정의하고, 컴파일 타임에 타입 체크를 수행한다.
    • 리터럴 타입은 값 그 자체를 타입으로 사용하는 개념으로, 예를 들어 "ADMIN_READONLY"와 같은 특정 문자열을 타입으로 지정할 수 있다.
    • 지정된 문자열 이외의 다른 문자열은 허용하지 않기 때문에, 타입스크립트가 컴파일 시점에 오타를 잡아준다.
  • 유니언 타입은 컴파일 시 사라지며, 단순한 문자열로 처리된다.
  • 두 개 이상의 리터럴 타입을 허용하고 싶을 때 유니언 타입을 사용한다. 예를 들어, "ADMIN_READONLY" | "USER"와 같은 형태로 사용된다.
  • 유니언 타입을 사용하면, 여러 타입의 값을 받을 수 있어 유연하게 활용할 수 있다.

이넘(enum) 타입

  • 이넘(enum)은 각 값들이 객체의 속성으로 변환되어 런타임에서도 그 값들을 변수처럼 참조할 수 있다.
  • 이넘은 즉시 실행 함수를 사용해 객체를 정의하고 초기화한다.
      1. 변수를 선언하고, 2. 초기화한다.
    • 함수 내부에서 Role["ADMIN_READONLY"] = "ADMIN_READONLY";와 같은 식으로 객체의 속성들이 정의되며, 최종적으로 Role 변수에 할당된다.
    • 예시로, 아래와 같은 객체가 생성된다:
      {
        ADMIN_READONLY: "ADMIN_READONLY",
        USER: "USER",
        GUEST: "GUEST"
      }
  • 결과적으로 Role은 런타임에서 사용할 수 있는 객체가 되어, Role.ADMIN_READONLY처럼 객체의 속성에 접근할 수 있게 된다.
  • 이넘은 런타임에서도 값들을 더 명확하고 일관되게 사용할 수 있는 장점이 있다.

유니언 타입 vs 이넘 타입 요약

  • 유니언 타입은 컴파일 타임에만 영향을 주며, 가볍고 오타 방지 기능이 있지만, 런타임 참조는 불가능하다.
  • 이넘 타입은 런타임에서도 값을 변수처럼 참조할 수 있어, 특정 값들을 명확하게 사용할 때 유리하다.

기타 개념 정리

void 타입

  • void 타입은 이 함수에 반환 구문이 없다는 것을 명시적으로 알려주는 타입이다.
  • void 타입을 사용하는 함수는 콘솔에서 확인해보면 undefined를 반환하지만, undefinedvoid는 다르다.
    • undefined는 반환 구문이 있지만 아무것도 반환하지 않는다고 타입스크립트가 이해하게 된다.
    • void는 본질적으로 반환 구문이 없는 함수에 사용된다.
    • undefined는 매우 드문 경우에 사용된다.

never 타입

  • never 타입은 함수가 절대 아무것도 반환하지 않음을 명확하게 표현한다.
  • 예를 들어, 함수가 throw를 통해 에러를 던지는 경우, 이 함수는 절대 정상적으로 반환되지 않으므로 반환 타입이 never가 된다.
  • 만약 never로 지정하지 않으면, 타입스크립트는 이 함수를 void로 추론할 수 있다.

0개의 댓글