TypeScript의 enum에 값이 있는지 확인하십시오.
번호를 받고이 type = 3
열거 형에 있는지 확인해야합니다.
export const MESSAGE_TYPE = {
INFO: 1,
SUCCESS: 2,
WARNING: 3,
ERROR: 4,
};
내가 찾은 가장 좋은 방법은 모든 Enum 값을 배열로 가져오고 indexOf를 사용하는 것입니다. 그러나 결과 코드는 읽기 어렵습니다.
if( -1 < _.values( MESSAGE_TYPE ).indexOf( _.toInteger( type ) ) ) {
// do stuff ...
}
이 작업을 수행하는 더 간단한 방법이 있습니까?
문자열 열거 형과 함께 작동 Object.values(ENUM).includes(ENUM.value)
하려면 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html 에 따라 문자열 열거 형이 역 매핑되지 않기 때문에 사용해야 합니다 .
Enum Vehicle {
Car = 'car',
Bike = 'bike',
Truck = 'truck'
}
된다 :
{
Car: 'car',
Bike: 'bike',
Truck: 'truck'
}
따라서 다음을 수행하면됩니다.
if (Object.values(Vehicle).includes(Vehicle.car)) {
// Do stuff here
}
에 대한 오류가 발생 Property 'values' does not exist on type 'ObjectConstructor'
하면 ES2017을 대상으로하지 않는 것입니다. 이 tsconfig.json 구성을 사용할 수 있습니다.
"compilerOptions": {
"lib": ["es2017"]
}
아니면 그냥 캐스트를 할 수 있습니다.
if ((<any>Object).values(Vehicle).includes(Vehicle.car)) {
// Do stuff here
}
TypeScript를 사용하는 경우 실제 enum을 사용할 수 있습니다 . 그런 다음을 사용하여 확인할 수 있습니다 in
. 이것은 열거 형이 아니고 const
숫자 기반 인 경우에만 작동합니다 .
export enum MESSAGE_TYPE {
INFO = 1,
SUCCESS = 2,
WARNING = 3,
ERROR = 4,
};
var type = 3;
if (type in MESSAGE_TYPE) {
}
위의 열거 형을 컴파일 할 때 아래 개체를 생성하기 때문에 작동합니다.
{
'1': 'INFO',
'2': 'SUCCESS',
'3': 'WARNING',
'4': 'ERROR',
INFO: 1,
SUCCESS: 2,
WARNING: 3,
ERROR: 4
}
귀하의 질문에 대한 매우 간단하고 쉬운 해결책이 있습니다.
var districtId = 210;
if (DistrictsEnum[districtId] != null) {
// Returns 'undefined' if the districtId not exists in the DistrictsEnum
model.handlingDistrictId = districtId;
}
export enum UserLevel {
Staff = 0,
Leader,
Manager,
}
export enum Gender {
None = "none",
Male = "male",
Female = "female",
}
로그의 차이 결과 :
log(Object.keys(Gender))
=>
[ 'None', 'Male', 'Female' ]
log(Object.keys(UserLevel))
=>
[ '0', '1', '2', 'Staff', 'Leader', 'Manager' ]
해결책은 키를 숫자로 제거해야합니다.
export class Util {
static existValueInEnum(type: any, value: any): boolean {
return Object.keys(type).filter(k => isNaN(Number(k))).filter(k => type[k] === value).length > 0;
}
}
용법
// For string value
if (!Util.existValueInEnum(Gender, "XYZ")) {
//todo
}
//For number value, remember cast to Number using Number(val)
if (!Util.existValueInEnum(UserLevel, 0)) {
//todo
}
참고 URL : https://stackoverflow.com/questions/43804805/check-if-value-exists-in-enum-in-typescript
'Programing' 카테고리의 다른 글
Uint8Array를 Javascript의 문자열로 (0) | 2020.08.31 |
---|---|
색상 1 및 색상 2 범위의 n 색상 그라데이션 (0) | 2020.08.31 |
CSS 테이블 열 자동 너비 (0) | 2020.08.31 |
프로세스가 실행 중인지 확인하는 Linux / Unix 명령? (0) | 2020.08.31 |
.NET에서 정수로 목록을 채우는 더 쉬운 방법 (0) | 2020.08.31 |