javascript - टाइपस्क्रिप्ट में मान मौजूद है कि जाँच करें




typescript enums (3)

मैं एक संख्या 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 ...
}

क्या ऐसा करने का एक सरल तरीका है?


आपके प्रश्न का बहुत ही सरल और आसान समाधान है:

var districtId = 210;

if (DistrictsEnum[districtId] != null) {

// Returns 'undefined' if the districtId not exists in the DistrictsEnum 
    model.handlingDistrictId = districtId;
}

यदि आप टाइपस्क्रिप्ट का उपयोग कर रहे हैं, तो आप एक वास्तविक एनम का उपयोग कर सकते हैं। तब आप इसका उपयोग करके जांच कर सकते हैं। ध्यान दें कि यह केवल तभी काम करता है जब आपका एनम कांस्टेबल न हो और नंबर-आधारित हो:

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
}

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
}




enums