Check if value exists in enum in TypeScript

前端 未结 8 1561
悲哀的现实
悲哀的现实 2020-11-29 17:38

I recieve a number type = 3 and have to check if it exists in this enum:

export const MESSAGE_TYPE = {
    INFO: 1,
    SUCCESS: 2,
    WARNING:         


        
8条回答
  •  悲&欢浪女
    2020-11-29 18:03

    export enum UserLevel {
      Staff = 0,
      Leader,
      Manager,
    }
    
    export enum Gender {
      None = "none",
      Male = "male",
      Female = "female",
    }
    

    Difference result in log:

    log(Object.keys(Gender))
    =>
    [ 'None', 'Male', 'Female' ]
    
    log(Object.keys(UserLevel))
    =>
    [ '0', '1', '2', 'Staff', 'Leader', 'Manager' ]
    

    The solution, we need to remove key as a number.

    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;
      }
    }
    

    Usage

    // 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
    }
    

提交回复
热议问题