TypeScript

[TypeScript]타입스크립트 열거형(enum) 키, 값 확인

DevStory 2021. 9. 17.

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

위 코드의 단점으로는 열거형이 여러 개 존재하는 경우 열거형마다 값을 체크하는 함수를 구현해야 합니다.

반응형

댓글