다음은 해당 열거 형의 JavaScript 출력입니다.
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
}
문자열 값이있는 열거 형 멤버
TypeScript 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);
}
}