일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 리액트쿼리
- 자바스크립트 알고리즘 문제
- 자바스크립트
- CSS
- NPM
- leetcode
- 프로그래머스
- 자바스크립트코딩테스트
- Next
- leetcode문제풀이
- 프론트엔드
- 알고리즘문제풀이
- next13
- Baekjoon
- lodash
- react
- 제로베이스
- JavaScript
- JS
- til
- 리액트
- 자바스크립트 문제
- HTML
- 자바스크립트 연결리스트
- Next.js13
- 자바스크립트 알고리즘
- 자바스크립트 문제 풀이
- stack문제
- 타입스크립트
- 자바스크립트 문제풀이
- Today
- Total
코드노트
타입스크립트 열거형 정리 본문
타입스크립트 열거형
- 의미있는 상수 자료를 정의할 수 있다! (문서화 시킬 수 있다.)
- 키를 값에 할당하며 순서가 없는 집합이자 자료구조이다.
- enum 키워드 + PascalCase 를 조합하여 생성한다.
- 계산된 값을 사용할 수 있다. -> 타입스크립트가 알아서 추론한다.
순자형 열거
interface처럼 할당없이 객체를 선언하는것처럼 만들 수 있다.
- Gold에 100을 주고 컴파일된 타입스크립트를 보면 값을 주지 않은 Silver, Bronze도 101, 102의 값을 가지고 있는걸 볼 수 있다.
- interface는 값으로 사용할 수 없지만 enum은 값으로 사용이 가능하다. console.log를 찍어보면 객체가 나온걸 볼 수 있다.
- 그 외에도 객체처럼 사용이 가능하다.
- 아무것도 넣지 않으면 index처럼 0,1,2 ... 로 증가한다. +1씩 순서대로 증가된다.
- 만약 특정값들을 넣어야한다면 하나하나 넣어줘야한다!
문자형 열거
- 각 멤버의 값을 문자열로 초기화되어야한다.
- 숫자형 열거와 동장 방식이 다르다. (값이 증가하지 않음, 리버스 매핑의 차이점도 있다.)
- 문자열거형은 숫자열거형과 다르게 값을 다 지정해주어야한다.
- 값을 지정하지않으면 index로 값이 들어간다.
혼합형 열거(Heterogeneous)
- 이렇게도 사용할 수 있지만 JS로 상수를 만들어서 사용하는것과 다를게 없고, 사용할일도 없을것이다.
- 이렇게도 사용은 할 수있다는것만 알고 이렇게 사용하지는 말자..
리버스 매핑
- 숫자형 열거 같은 경우 키의 값을 역으로 매핑할 수 있다. ( 문자형은 지원되지 않음 )
- enum에서 속성에 아무런 값을 설정하지 않으면 값이 number로 설정된다. ( 0, 1, 2, ... )
- 리버스 매핑은 enum key로 value값을 받을 수 있다. 그 value값을 통해서 key를 다시 불러서 리버스 매핑으로 호출한다.
const 열거
- 기본적으로 열거형은 불안전한 접근을 허용한다. (const enum은 이러한 점을 보완하기 위한 안전한 열거형이다.)
- enum앞에 const 키워드를 명시한다.
- 컴파일 후 제거되기 때문에 JS코드를 생성하지 않는다.
- enum 이 JS코드를 생성하지 않는 모습을 볼 수 있다!
열거형 활용
- 그러나 런타임에서는 존재하고 있다. 이를 활용해보자!
- keyof, keyof typeof와 조합하여 활용 가능하다.
type LangCode = keyof를 사용해서 넣게되면 여러가지 type이 들어가있는걸 볼 수 있다.
- typeof를 그냥 담으면 LangCode가 담겨있지만 keyof typeof를 사용하게 되면 enum에 적은 값들이 들어가있는걸 볼 수 있다.
- 그럼 객체를 type에 들어가는 값들을 사용할 수 있다.