यह उस एनम का जावास्क्रिप्ट आउटपुट है:
var MyEnum;
(function (MyEnum) {
MyEnum[MyEnum["First"] = 0] = "First";
MyEnum[MyEnum["Second"] = 1] = "Second";
MyEnum[MyEnum["Third"] = 2] = "Third";
})(MyEnum || (MyEnum = {}));
जो इस तरह से एक वस्तु है:
{
"0": "First",
"1": "Second",
"2": "Third",
"First": 0,
"Second": 1,
"Third": 2
}
स्ट्रिंग मान के साथ Enum सदस्य
टाइपस्क्रिप्ट 2.4 में संभवत: स्ट्रिंग एनम सदस्य मानों के लिए एनमों की क्षमता शामिल है। तो यह संभव है कि एक एनम के साथ समाप्त हो।
enum MyEnum {
First = "First",
Second = 2,
Other = "Second"
}
var MyEnum;
(function (MyEnum) {
MyEnum["First"] = "First";
MyEnum[MyEnum["Second"] = 2] = "Second";
MyEnum["Other"] = "Second";
})(MyEnum || (MyEnum = {}));
सदस्य नाम प्राप्त करना
हम ऊपर दिए गए उदाहरण को देख सकते हैं कि यह पता लगाने की कोशिश की जाए कि एनम सदस्यों को कैसे प्राप्त करें:
{
"2": "Second",
"First": "First",
"Second": 2,
"Other": "Second"
}
यहाँ मैं क्या लेकर आया हूँ:
const e = MyEnum as any;
const names = Object.keys(e).filter(k =>
typeof e[k] === "number"
|| e[k] === k
|| e[e[k]]?.toString() !== k
);
सदस्य मान
एक बार, हमारे पास नाम हैं, हम ऐसा करके मूल्य प्राप्त करने के लिए उन पर लूप कर सकते हैं:
const values = names.map(k => MyEnum[k]);
एक्सटेंशन क्लास
मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका अपने स्वयं के कार्यों (पूर्व EnumEx.getNames(MyEnum)) का निर्माण करना है। आप किसी एनम में फ़ंक्शन नहीं जोड़ सकते।
class EnumEx {
private constructor() {
}
static getNamesAndValues(e: any) {
return EnumEx.getNames(e).map(n => ({ name: n, value: e[n] as string | number }));
}
static getNames(e: any) {
return Object.keys(e).filter(k =>
typeof e[k] === "number"
|| e[k] === k
|| e[e[k]]?.toString() !== k
);
}
static getValues(e: any) {
return EnumEx.getNames(e).map(n => e[n] as string | number);
}
}