타입스크립트 (3) - Enum, unknown, void, never

김태완·2024년 11월 19일
post-thumbnail

Enum

  • 열거형 타입은 자바스크립트에는 존재하지 않고 오직 타입스크립트에서만 사용할 수 있는 특별한 타입이다.
  • 열거형은 다음과 같이 여러개의 값을 나열하는 용도로 사용한다.
    • 위 사진처럼 유저의 권한과 같은 여러개의 멤버를 갖는 값을 숫자로 표기할 때 enum을 이용해 보다 안전하고 직관적으로 관리할 수 있다.
    • 참고로 다음과 같이 enum 멤버에 숫자 값을 직접 할당하지 않아도 0 부터 1씩 늘어나는 값으로 자동으로 할당된다.
      • 이렇게 멤버의 값이 모두 숫자인 enum을 숫자형 enum 혹은 숫자 열거형 타입이라고 부른다.
  • 이처럼 숫자 말고도 문자열 값도 할당할 수 있다. 이를 문자열 열거형 이라고 한다.
  • enum은 컴파일 결과 객체가 된다. enum은 컴파일될 때 다른 타입들처럼 사라지지 않고 자바스크립트 객체로 변환된다. 따라서 우리가 위에서 했던 것 처럼 값으로 사용할 수 있는 것이다.
  • ex)
  • 출력 결과
  • 주의사항
    Enum 타입을 지정할 때는 enum Job { ... }과 같이 지정한다.
    Enum 각 항목의 값은 기본적으로 0, 1, 2, … 처럼 숫자 값인데 되도록이면 직접 값을 지정해 주는 것이 좋다. 값을 지정하려면 이퀄(=) 문자로 지정해준다. 객체에서 하던 것처럼 콜론이랑 헷갈리지 않도록 주의하자.

Unknown

  • unknown 타입은 any 타입과 비슷하지만 더 안전한 타입이다.
  • unknown 타입의 변수는 어떤 타입의 값이든 다 저장할 수 있다.
  • 그러나 반대로, unknown 타입의 값은 어떤 타입의 변수에도 저장할 수 없다.
  • 또한, unknown 타입의 값은 어떤 연산에도 참여할 수 없고, 어떤 메서드도 사용할 수 없다.
    - 즉, 값을 저장하는 행위밖에 할 수 없다.
  • 만약 unknown. 타입의 값을 number 타입의 값처럼 취급하고 연산을 수행하게 하고 싶다면???
    • 조건문을 이용해 값이 number 타입의 값임을 보장해줘야 한다.
    • 이처럼 조건문을 이용해 특정 값이 특정 타입임을 보장할 수 있게 되면 해당 값의 타입이 자동으로 바뀌는데, 이를 타입 좁히기 라고 한다.

      특정 변수가 당장 어떤 값을 받게 될 지 모른다면 any 타입으로 정의하는 것 보단 unknown 타입을 이용하는게 안전한 선택이다!

void

  • void 타입은 아무런 값도 없음을 의미하는 타입이다.
  • 보통은 다음과 같이 아무런 값도 반환하지 않는 함수의 반환값 타입을 정의할 때 사용한다.
  • 변수의 타입으로도 당연히 void 타입을 지정할 수 있다. 그러나 void 타입의 변수에는 undefined 이외의 다른 타입의 값을 담을 수 없다. (void 타입이 undefined 타입을 포함하는 타입이기 때문)
  • 하지만! tsconfig.json에서 strictNullChecks 옵션을 false로 설정하면 특별히 void 타입의 변수에 null 값도 담을 수 있게 된다.
  • 근데 왜 사용하는 거야??
    • 만약 아무것도 리턴하지 않는 함수에 void 타입을 주지않고, undefinednull 타입을 주면, return undefined 와 같은 리턴문을 추가해줘야 하기 때문이다.

never

  • never 타입은 불가능을 의미하는 타입이다.
  • 함수가 어떠한 값도 반환할 수 없는 상황일 때 해당 함수의 반환값 타입을 정의할 때 사용된다.
  • 함수 func3는 무한 루프를 돌기 때문에 아무런 값도 반환할 수 없다. 엄밀히 말하면 이 함수는 영원히 종료될 수 없기 때문에 뭔가를 반환한다는 것 자체가 '불가능' 하다.
  • 이렇게 불가능 한 값의 타입을 정의할 때 never 타입을 사용한다.
  • 함수 fun4와 같이 의도적으로 오류를 발생시키는 함수도 never 타입으로 반환값 타입을 정의할 수 있다.
  • 변수의 타입을 never로 정의하면 any를 포함해 그 어떠한 타입의 값도 이 변수에 담을 수 없게 된다.

이미지 출처: <한 입 크기로 잘라먹는 타입스크립트>
https://www.inflearn.com/course/%ED%95%9C%EC%9E%85-%ED%81%AC%EA%B8%B0-%ED%83%80%EC%9E%85%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8?inst=68d752f7&utm_source=instructor&utm_medium=referral&utm_campaign=inflearn_%ED%8A%B8%EB%9E%98%ED%94%BD_promotion-link

profile
중고

0개의 댓글