यह उस एनम का जावास्क्रिप्ट आउटपुट है:
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);
}
}