programing

TypeScript에서 Enum like type을 생성하는 방법

cafebook 2023. 3. 29. 21:53
반응형

TypeScript에서 Enum like type을 생성하는 방법

Google maps API for TypeScript 정의 파일을 만들고 있습니다.

그리고 예를 들어 열거형과 같은 유형을 정의해야 합니다. google.maps.Animation성질을 있다, 즉, 두 가지 성질이 있습니다.BOUNCE ★★★★★★★★★★★★★★★★★」DROP.

TypeScript에서 이 작업을 수행하는 방법은 무엇입니까?

TypeScript 0.9+에는 다음과 같은 Enum 사양이 있습니다.

enum AnimationType {
    BOUNCE,
    DROP,
}

마지막 쉼표는 옵션입니다.

TypeScript 0.9(현재 Alpha 릴리스)에서는 다음과 같이 열거 정의를 사용할 수 있습니다.

enum TShirtSize {
  Small,
  Medium,
  Large
}

var mySize = TShirtSize.Large;

기본적으로는 이러한 열거에는 각각 0, 1 및 2가 할당됩니다.이러한 숫자를 명시적으로 설정하려면 열거 선언의 일부로 설정할 수 있습니다.

리스트 6.2 명시적인 멤버를 포함한 열거

enum TShirtSize {
  Small = 3,
  Medium = 5,
  Large = 8
}

var mySize = TShirtSize.Large;

이 두 예시는 JavaScript 프로그래머용 TypeScript에서 직접 추출되었습니다.

이는 0.8 사양과는 다릅니다.0.8 사양은 다음과 같습니다. 그러나 실험 사양으로 표시되어 변경 가능성이 높기 때문에 이전 코드를 업데이트해야 합니다.

면책사항 - 이 0.8 예는 TypeScript 컴파일러의 새로운 버전에서는 파손될 수 있습니다.

enum TShirtSize {
  Small: 3,
  Medium: 5,
  Large: 8
}

var mySize = TShirtSize.Large;

이것은 이제 언어의 일부입니다.이에 대한 매뉴얼은 TypeScriptLang.org > Basic Types > enum 을 참조하십시오.이러한 에넘의 사용 방법에 관한 문서의 발췌.

enum Color {Red, Green, Blue};
var c: Color = Color.Green;

또는 수동 백업 번호:

enum Color {Red = 1, Green = 2, Blue = 4};
var c: Color = Color.Green;

, 수도 있습니다.Color[2].

이 모든 것이 어떻게 조합되는지를 나타내는 예를 다음에 제시하겠습니다.

module myModule {
    export enum Color {Red, Green, Blue};

    export class MyClass {
        myColor: Color;

        constructor() {
            console.log(this.myColor);
            this.myColor = Color.Blue;
            console.log(this.myColor);
            console.log(Color[this.myColor]);
        }
    }
}

var foo = new myModule.MyClass();

이 로그는 다음과 같습니다.

undefined  
2  
Blue

왜냐하면 이 글을 쓸 때 Typescript Playground는 다음 코드를 생성하기 때문입니다.

var myModule;
(function (myModule) {
    (function (Color) {
        Color[Color["Red"] = 0] = "Red";
        Color[Color["Green"] = 1] = "Green";
        Color[Color["Blue"] = 2] = "Blue";
    })(myModule.Color || (myModule.Color = {}));
    var Color = myModule.Color;
    ;
    var MyClass = (function () {
        function MyClass() {
            console.log(this.myColor);
            this.myColor = Color.Blue;
            console.log(this.myColor);
            console.log(Color[this.myColor]);
        }
        return MyClass;
    })();
    myModule.MyClass = MyClass;
})(myModule || (myModule = {}));
var foo = new myModule.MyClass();

id/string 열거형에는 다음 항목이 있습니다.

class EnumyObjects{
    public static BOUNCE={str:"Bounce",id:1};
    public static DROP={str:"Drop",id:2};
    public static FALL={str:"Fall",id:3};


}

업데이트:

@iX3에서 알 수 있듯이 Typescript 2.4는 열거 문자열을 지원합니다.

참조: Typescript에 문자열 값을 사용하여 열거형 작성


원답:

String 멤버 값의 경우 TypeScript는 숫자만 열거 멤버 값으로 허용합니다.그러나 구현할 수 있는 솔루션/해킹이 몇 가지 있습니다.

해결책 1:

복사원: https://blog.rsuter.com/how-to-implement-an-enum-with-string-values-in-typescript/

간단한 해결책이 있습니다.할당하기 전에 문자열 리터럴을 any에 캐스트합니다.

export enum Language {
    English = <any>"English",
    German = <any>"German",
    French = <any>"French",
    Italian = <any>"Italian"
}

솔루션 2:

복사원: https://basarat.gitbooks.io/typescript/content/docs/types/literal-types.html

문자열 리터럴을 유형으로 사용할 수 있습니다.예를 들어 다음과 같습니다.

let foo: 'Hello';

여기서는 foo라는 변수를 만들었습니다.이 변수에 리터럴 값 'Hello'만 할당할 수 있습니다.이것은, 이하에 나타냅니다.

let foo: 'Hello';
foo = 'Bar'; // Error: "Bar" is not assignable to type "Hello"

그 자체로는 그다지 유용하지 않지만, 형식 조합으로 조합하여 강력한(그리고 유용한) 추상화를 만들 수 있습니다.

type CardinalDirection =
    "North"
    | "East"
    | "South"
    | "West";

function move(distance: number, direction: CardinalDirection) {
    // ...
}

move(1,"North"); // Okay
move(1,"Nurth"); // Error!

타이프 스크립트의 에넘:

이름 있는 상수 집합을 정의하기 위해 Enum을 타이프스크립트 언어로 입력합니다.에넘을 사용하는 것은 우리의 삶을 더 쉽게 만들 수 있다.그 이유는 이러한 상수가 열거형이 나타내는 값보다 읽기 쉽기 때문입니다.

열거형 작성:

enum Direction {
    Up = 1,
    Down,
    Left,
    Right,
}

이 타이프스크립트 문서의 예는 enum의 구조를 매우 잘 설명하고 있습니다.첫 번째 열거값(Up)은 1로 초기화됩니다.그런 다음 숫자 열거의 다음 멤버는 모두 이 값에서 자동으로 증가합니다(즉, 아래 = 2, 왼쪽 = 3, 오른쪽 = 4).첫 번째 값을 1로 초기화하지 않으면 열거형이 0에서 시작된 다음 자동으로 증가합니다(예: 아래 = 1, 왼쪽 = 2, 오른쪽 = 3).

열거형 사용:

다음 방법으로 열거형 값에 액세스할 수 있습니다.

Direction.Up;     // first the enum name, then the dot operator followed by the enum value
Direction.Down;

이렇게 하면 코드를 작성하는 방법이 훨씬 더 설명적이 됩니다.에넘은 기본적으로 마법의 숫자(프로그래머가 특정 컨텍스트에서 의미를 부여했기 때문에 어떤 엔티티를 나타내는 숫자)를 사용하는 것을 금지합니다.매직 넘버는 다음과 같은 이유로 좋지 않습니다.

  1. 우리는 더 잘 생각해야 합니다. 우리의 코드를 추론하기 전에 먼저 숫자를 엔티티로 변환해야 합니다.
  2. 오랜 시간이 지난 후 코드를 검토하거나 다른 프로그래머가 코드를 검토하면 이 숫자들이 무엇을 의미하는지 알 수 없습니다.

다음과 같이 enum을 입력할 수 있습니다(개체로 루프할 수도 있습니다).

enum: { [x: string]: string }

지도 예:

export const yourFunction = (
  enum: { [x: string]: string },
 ) => { 
  const iHaveBeenMapped = Object.keys(enum).map((key) => {
   const enumValue = enum[key];
  }); 
 } 

언급URL : https://stackoverflow.com/questions/12687793/how-to-create-enum-like-type-in-typescript

반응형