मैं सिर्फ एक इंटरफ़ेस घोषित करता हूं और उस प्रकार के वैरिएबल का उपयोग करता हूं जो एनम को एक्सेस करता है। इंटरफ़ेस और एनम को सिंक में रखना वास्तव में आसान है, क्योंकि टाइपस्क्रिप्ट शिकायत करता है कि एनुम में कुछ परिवर्तन होता है, जैसे।
त्रुटि TS2345: प्रकार 'टाइपऑफ EAbFlagEnum' का तर्क 'IAbFlagEnum' प्रकार के पैरामीटर के लिए उपलब्ध नहीं है। प्रॉपर्टी Property मूव ’टाइप EA टाइपऑफ ईएबीफ्लैगएनम’ में गायब है।
इस विधि का लाभ विभिन्न प्रकार की स्थितियों में एनम (इंटरफ़ेस) का उपयोग करने के लिए किसी प्रकार की कास्टिंग की आवश्यकता नहीं है, और अधिक प्रकार की स्थितियों का समर्थन किया जाता है, जैसे स्विच / केस।
// Declare a TypeScript enum using unique string
// (per hack mentioned by zjc0816)
enum EAbFlagEnum {
None = <any> "none",
Select = <any> "sel",
Move = <any> "mov",
Edit = <any> "edit",
Sort = <any> "sort",
Clone = <any> "clone"
}
// Create an interface that shadows the enum
// and asserts that members are a type of any
interface IAbFlagEnum {
None: any;
Select: any;
Move: any;
Edit: any;
Sort: any;
Clone: any;
}
// Export a variable of type interface that points to the enum
export var AbFlagEnum: IAbFlagEnum = EAbFlagEnum;
वैरिएबल का उपयोग करना, एनम के बजाय वांछित परिणाम पैदा करता है।
var strVal: string = AbFlagEnum.Edit;
switch (strVal) {
case AbFlagEnum.Edit:
break;
case AbFlagEnum.Move:
break;
case AbFlagEnum.Clone
}
झंडे मेरे लिए एक और आवश्यकता थी, इसलिए मैंने एक एनपीएम मॉड्यूल बनाया जो इस उदाहरण में जोड़ता है, और परीक्षण शामिल हैं।
https://github.com/djabraham/ts-enum-tools