수색…


모든 enum 값을 얻는 방법

enum SomeEnum { A, B }

let enumValues:Array<string>= [];

for(let value in SomeEnum) {
    if(typeof SomeEnum[value] === 'number') {
        enumValues.push(value);
    }
}

enumValues.forEach(v=> console.log(v))
//A
//B

명시적인 값을 가진 열거 형

기본적으로 모든 enum 값은 숫자로 확인됩니다. 네가 뭔가를 가진다면

enum MimeType {
  JPEG,
  PNG,
  PDF
}

예를 들어 MimeType.PDF 뒤에있는 실제 값은 2 됩니다.

그러나 어떤 때는 열거 형을 다른 유형으로 변환하는 것이 중요합니다. 예를 들어 백엔드 / 프론트 엔드 / 다른 시스템에서 값을받습니다. 이것은 확실히 문자열입니다. 이것은 고통 일 수 있지만 다행히도이 방법이 있습니다.

enum MimeType {
  JPEG = <any>'image/jpeg',
  PNG = <any>'image/png',
  PDF = <any>'application/pdf'
}

MimeType.PDFapplication/pdf 됩니다.

TypeScript 2.4부터는 문자열 enum 을 선언 할 수 있습니다.

enum MimeType {
  JPEG = 'image/jpeg',
  PNG = 'image/png',
  PDF = 'application/pdf',
}

동일한 메소드를 사용하여 명시 적으로 숫자 값을 제공 할 수 있습니다.

enum MyType {
   Value = 3,
   ValueEx = 30,
   ValueEx2 = 300
}

또한 비 const 열거 형은 런타임시 실제 객체이기 때문에 Fancier 유형도 사용할 수 있습니다.

enum FancyType {
   OneArr = <any>[1],
   TwoArr = <any>[2, 2],
   ThreeArr = <any>[3, 3, 3]
}

된다

var FancyType;
(function (FancyType) {
    FancyType[FancyType["OneArr"] = [1]] = "OneArr";
    FancyType[FancyType["TwoArr"] = [2, 2]] = "TwoArr";
    FancyType[FancyType["ThreeArr"] = [3, 3, 3]] = "ThreeArr";
})(FancyType || (FancyType = {}));

사용자 정의 enum 구현 : enum을 확장합니다.

Enum을 독자적으로 구현해야하는 경우가 있습니다. 예를 들어 다른 열거 형을 확장하는 명확한 방법이 없습니다. 사용자 정의 구현은 다음을 허용합니다.

class Enum {
  constructor(protected value: string) {}

  public toString() {
    return String(this.value);
  }

  public is(value: Enum | string) {
    return this.value = value.toString();
  }
}

class SourceEnum extends Enum {
  public static value1 = new SourceEnum('value1');
  public static value2 = new SourceEnum('value2');
}

class TestEnum extends SourceEnum {
  public static value3 = new TestEnum('value3');
  public static value4 = new TestEnum('value4');
}

function check(test: TestEnum) {
  return test === TestEnum.value2;
}

let value1 = TestEnum.value1;

console.log(value1 + 'hello');
console.log(value1.toString() === 'value1');
console.log(value1.is('value1'));
console.log(!TestEnum.value3.is(TestEnum.value3));
console.log(check(TestEnum.value2));
// this works but perhaps your TSLint would complain
// attention! does not work with ===
// use .is() instead
console.log(TestEnum.value1 == <any>'value1'); 

사용자 정의 enum 구현없이 enums 확장

enum SourceEnum {
  value1 = <any>'value1',
  value2 = <any>'value2'
}

enum AdditionToSourceEnum {
  value3 = <any>'value3',
  value4 = <any>'value4'
}

// we need this type for TypeScript to resolve the types correctly
type TestEnumType = SourceEnum | AdditionToSourceEnum;
// and we need this value "instance" to use values
let TestEnum = Object.assign({}, SourceEnum, AdditionToSourceEnum);
// also works fine the TypeScript 2 feature
// let TestEnum = { ...SourceEnum, ...AdditionToSourceEnum };

function check(test: TestEnumType) {
  return test === TestEnum.value2;
}

console.log(TestEnum.value1);
console.log(TestEnum.value2 === <any>'value2');
console.log(check(TestEnum.value2));
console.log(check(TestEnum.value3));


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow