250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 리액트 메모
- chromatic error
- 함수형 프로그래밍 특징
- 리액트
- 항해99 미니프로젝트
- 리액트 렌더링 최적화
- 코어자바스크립트
- next js
- jwt
- 자바스크립트 엔진 v8
- 테스트 코드 툴 비교
- 항해99 부트캠프
- gql restapi 차이
- 웹팩 기본개념
- 타입스크립트
- 리액트 메모이제이션
- 리덕스
- 항해99
- this
- Js module
- 웹 크롤링
- JS module system
- v8 원리
- toggle-btn
- FP 특징
- 항해99 사전스터디
- 렌더링 최적화
- 알고리즘
- 실행컨텍스트
- js배열 알고리즘
Archives
- Today
- Total
Jaeilit
이넘(Enums) 본문
728x90
이넘은 특정 값들의 집합을 의미하는 자료형
숫자형과 문자형도 가능하고 문자와 숫자를 합친 복합형도 가능하지만 숫자형을 쓰는게 일반적이다.
예제)
// 숫자형
// 아무 값도 주지 않았을 때
enum Direction {
Up, // 0
Down, // 1
Left, // 2
Right // 3
}
// 기본 값 선언
enum Direction {
Up = 1,
Down,
Left,
Right
}
// 문자형
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
}
// 복합형
enum BooleanLikeHeterogeneousEnum {
No = 0,
Yes = "YES",
}
Enum 을 선언만 했을 때는 첫번째와 같이 0, 1, 2, 3이 암묵적으로 인덱스 값이 주어지만 명시적으로 디폴트 값을 줄 수 도 있다.
2)
Enum 에 다른 타입의 값을 선언하면 첫번째 값에 초기화를 해줘야한다.
enum Wrong {
A = getSomeValue(),
B, // Error, 초기화가 필요합니다.
}
3) 이슈
Enum 을 알아보다 사용하지 않는 편이 좋다? 라는 포스팅을 봤습니다.
https://engineering.linecorp.com/ko/blog/typescript-enum-tree-shaking/
Tree-shaking이 되지 않는다 라는 이유입니다.
tree-shaking https://webpack.kr/guides/tree-shaking/
Tree-shaking 은 필요하지 않는 코드를 삭제하는 방식/기능입니다.
// 내 코드
export enum MOBILE_OS {
IOS,
ANDROID
}
// 문자열을 할당한 경우
export enum MOBILE_OS {
IOS = 'iOS',
ANDROID = 'Android'
}
// 자바스크립트로 트랜스파일 후
export var MOBILE_OS;
(function (MOBILE_OS) {
MOBILE_OS[MOBILE_OS["IOS"] = 0] = "IOS";
MOBILE_OS[MOBILE_OS["ANDROID"] = 1] = "ANDROID";
})(MOBILE_OS || (MOBILE_OS = {}));
Enum 으로 선언한 코드들이 자바스크립트 코드로 트랜스파일 하고 나서는 그대로 남아 있습니다.
그럼 어떻게 해야하나?
Union Types
const MOBILE_OS = {
IOS: 'iOS',
Android: 'Android'
} as const;
type MOBILE_OS = typeof MOBILE_OS[keyof typeof MOBILE_OS]; // 'iOS' | 'Android'
// 트랜스파일 후
const MOBILE_OS = {
IOS: 'iOS',
Android: 'Android'
};
// 다른 예제
enum LogLevel {
ERROR, WARN, INFO, DEBUG
}
// 'ERROR' | 'WARN' | 'INFO' | 'DEBUG';
type LogLevelStrings = keyof typeof LogLevel;
keyof typeof 을 이용해서 enum을 사용 할 수 있습니다.
728x90
'타입스크립트' 카테고리의 다른 글
배열 값을 순회하는 타입 만들기 (0) | 2022.12.13 |
---|---|
타스 - 타입 추론/호환 (0) | 2022.06.29 |
Union Types (0) | 2022.06.22 |
인터페이스 (0) | 2022.06.19 |
타입스크립트 - 기본타입 + 함수 (0) | 2022.06.15 |