-
열거형(Enum) 과 리터럴 타입⌨️ conceptualization/Typescript 2022. 9. 11. 16:02728x90
Enum(열거형) 이란 ?
연관된 아이템들을 함께 묶어서 표현 할 수 있는 수단
예시비교
- enum을 사용해보자 !
//📌 1. 다음과 같이 상단에 enum을 작성해보자 enum Forfun { Playingguitar, Singasong, EnjoyingDesserts, } const who = { myname: "yelim", age: 28, gender: "female", hobby: Forfun.Playingguitar,//📌 3. string value 의 값을 enum 내 properties 로 바꿔주자 married: false, }; interface Aboutme { readonly myname: string; age: number; gender: string; hobby: Forfun; //📌 2. gender 타입을 enum으로 설정해 놓자 married: boolean; } function aboutyelim(age: number): Aboutme { return who; } function aboutyelim2(aboutme: Aboutme): void {} aboutyelim2(who);
이전의 interface와 비교
👉🏻 컴파일된 js 파일을 확인해보자 !
compile 식 코드가 사라지는 interface와는 달리, enum은 코드가 구현되어 js파일에 다음과 같이 나타난다.
👉🏻 무엇을 의미하나 ?
이것은 enum이 런타임에 존재하는 실제 객체라는 사실을 보여준다 !
👉🏻 가장 큰 차이로는 숫자 열거형(Numeric Enum)
다음과 같이 enum 속에 선언된 값의 순서에 따라 0부터 시작해서 순차적으로 숫자값이 할당됨을 의미한다.
enum Forfun { Playingguitar = 0, Singasong = 1, EnjoyingDesserts = 2, }
❗️ 숫자 열거형(Numeric Enum)이 아닌 문자형 열거형(Stirng Enum)을 사용하고 싶다면 ?
- 그냥 간단하게 string 값을 선언해 주면 된다.
enum Forfun { Playingguitar = 'playingguitar', Singasong = 'singasong', EnjoyingDesserts = 'enjoyingDesserts', }
- 다음과 같은 컴파일된 js 파일을 확인 할 수 있다 !
string enum은 numeric enum 처럼 자동 증가하는 기능은 없지만, 조금 더 읽기 쉬운 값을 할당 할수 있는 장점이 있다.
- 또 다른 property 값을 제한하는 방법
리터럴 타입 이란 ?
- enum 보다 훨씬 심플한 타입이다.
- 일반적으로 파이프(|)를 사용하여 유니온 타입을 함께 사용한다.
- 다음과 같이 사용될 수 있다.
interface Aboutme { readonly myname: string; age: number; gender: string; hobby: 'playingguitar' | 'singasong' | 'enjoyingDesserts'; //📌 1. enum type인 Forfun을 지워주고 문자열 + 파이프(string | )로 넣어준다. married: boolean; } function aboutyelim(age: number): Aboutme { return { myname: "yelim", age: 28, gender: "female", hobby: 'singasong',//📌 2. Forfun.Playingguitar 를 삭제하고, hobby의 string값을 넣어준다 married: false, }; }
(참고영상) 땅콩코딩 : https://www.youtube.com/watch?v=-TlpYcmHvb8'⌨️ conceptualization > Typescript' 카테고리의 다른 글
함수의 타입명시 (0) 2022.09.11 Any, Union Type, Intersection Type, Type Aliases & Type Guards에 대해서 알아보기 (0) 2022.09.11 타입으로 사용되는 인터페이스 (Interface) (0) 2022.09.09 타입 명시 (Type Annotations) (0) 2022.09.09 타입 추론 (Type Inference) (2) 2022.09.09