본문 바로가기

개발하자

스크립트 열거값을 배열로 입력합니다

반응형

스크립트 열거값을 배열로 입력합니다

TypeScript의 enum 값을 배열로 얻을 수 있나요?

이런 식으로:

enum MyEnum {
    FOO = 'foo',
    BAR = 'bar'
}

된다

['foo', 'bar']



이 기능은 숫자 숫자와 함께 작동해야 하며 유형 검사를 수행합니다:

type EnumObject = {[key: string]: number | string};
type EnumObjectEnum<E extends EnumObject> = E extends {[key: string]: infer ET | string} ? ET : never;

function getEnumValues<E extends EnumObject>(enumObject: E): EnumObjectEnum<E>[] {
  return Object.keys(enumObject)
    .filter(key => Number.isNaN(Number(key)))
    .map(key => enumObject[key] as EnumObjectEnum<E>);
}

예를 들어 다음과 같습니다:

enum NumEnum {
    A,
    B,
    C,
}
// The type is inferred as NumEnum[]
let numEnumValues = getEnumValues(NumEnum);

TypeScript Playground

자세한 내용은 여기에 올렸습니다:




열거를 위한 가장 간단한 방법은 다음을 사용하는 것이다

enum MyEnum {
    FOO = 'foo',
    BAR = 'bar'
}
console.log(Object.values(MyEnum));



예, 다음을 사용할 수 있습니다:

Object.values(MyEnum)

enum은 컴파일 후 JS 개체이기 때문에:

var MyEnum;
(function (MyEnum) {
    MyEnum["FOO"] = "foo";
    MyEnum["BAR"] = "bar";
})(MyEnum || (MyEnum = {}));



완전하게 입력된 코드의 경우 연산자의 도움을 받아 값 목록을 유형으로 추론할 수 있습니다:

enum MyEnum {
    FOO = 'foo',
    BAR = 'bar'
}

type MyEnumValue = `${MyEnum}`
// => type MyEnumValue = "foo" | "bar"

const values: MyEnumValue[] = Object.values(MyEnum)
// => ["foo", "bar"]

참조 기사:




편집:

임호 @표도르의 용액은 스트링넘을 포함하기 때문에 더 깨끗합니다:

const enumAsArray = Object.values(MyEnum).filter(value => typeof value === 'string')

반응형