TypeScript에서 열거형 타입으로 구현된 집합에 키가 존재하는지 혹은 값이 존재하는지 확인해야 하는 경우가 존재합니다.
이번 포스팅에서는 타입스크립트에서 열거형의 키 또는 값이 존재하는지 확인하는 방법을 정리하였습니다.
열거형 키(Key) 확인
열거형에 키가 존재하는지 확인하는 방법입니다.
다음 코드와 같이 정의된 Color 열거형이 존재합니다.
enum Color {
Red = 1,
Green = 2,
Blue = "BLUE"
}
열거형 Color에서 "Blue" 키가 존재하는지 확인하기 위해 in 연산자를 사용할 수 있습니다.
enum Color {
Red = 1,
Green = 2,
Blue = "BLUE"
}
console.log("Blue" in Color); // true
console.log("Pink" in Color); // false
주의사항으로 in 연산자로 확인하고자 하는 키(Key)는 백틱( ` ) 또는 작은따옴표( ' ) , 큰 따옴표( " )로 감싸줘야 합니다.
열거형 값(Value) 확인
열거형 값을 확인하는 방법은 in 연산자로 처리할 수 없습니다.
다음 방법으로 확인할 수 있는데요.
Object.values(열거형).includes(값)
단, Object.values()는 ES2017 또는 이후 버전에서 사용할 수 있습니다.
es2017 버전을 사용하기 위해서 tsconfig.json 파일을 수정합니다.
"compilerOptions"의 "lib"에 es2017을 추가합니다.
타입에 대해 좀 더 안전하게 처리하고 싶은 경우 아래와 같이 처리합니다.
Object.values(열거형).includes(값 as 열거형)
또는 다음과 같이 처리할 수도 있지만...
(<any>Object).values(열거형).includes(값)
TypeScript에서 any 타입을 사용하는 것을 자제하라고 권유하고 있으므로 any 타입으로 캐스팅하는 방법은 좋지 않습니다.
만약, 컴파일 옵션을 변경할 수 없거나 es2017 이전 버전인 경우 반복문을 사용하여 값이 존재하는지 체크해야 합니다.
enum Color {
Red = 1,
Green = 2,
Blue = "BLUE"
}
function valueInColor(val) {
for(let k in Color) {
if(Color.hasOwnProperty(k) && Color[k] === val) {
return true;
}
}
return false;
}
console.log(valueInColors("BLUE")); // true
위 코드의 단점으로는 열거형이 여러 개 존재하는 경우 열거형마다 값을 체크하는 함수를 구현해야 합니다.
'TypeScript' 카테고리의 다른 글
[TypeScript]인덱스 시그니처(Index Signature) 사용 방법 (0) | 2021.12.21 |
---|---|
[TypeScript]Record Type 사용 방법 (0) | 2021.12.21 |
[TypeScript]타입스크립트 any, unknown 차이 (0) | 2021.09.17 |
[TypeScript]타입스크립트 Property does not exists on type (0) | 2021.09.16 |
[TypeScript]타입스크립트 게터(getter), 세터(setter) 구현 (0) | 2021.09.15 |
댓글