Hogyan hozzunk létre enum mint a típus géppel?

szavazat
84

Dolgozom egy meghatározások fájlt a Google Maps API-géppel.

És azt kell meghatároznunk enum mint a típus pl. google.maps.Animationamely két tulajdonságok: BOUNCEés DROP.

Hogyan kellene ezt tenni géppel?

A kérdést 02/10/2012 10:29
a forrás felhasználó
Más nyelveken...                            


6 válasz

szavazat
101

Gépelt 0.9+ van egy leírás a enums:

enum AnimationType {
    BOUNCE,
    DROP,
}

Az utolsó vessző opcionális.

Válaszolt 02/10/2012 10:45
a forrás felhasználó

szavazat
56

Mivel a gépelt 0,9 (jelenleg egy alfa kiadás), akkor használja a enum definíció, mint ez:

enum TShirtSize {
  Small,
  Medium,
  Large
}

var mySize = TShirtSize.Large;

Alapértelmezésben ezek felsorolások kap 0, 1, illetve 2. Ha azt szeretnénk, hogy kifejezetten meg ezeket a számokat, akkor megteheti részeként enum nyilatkozat.

Listing 6.2 felsorolások az explicit tagjai

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

var mySize = TShirtSize.Large;

Mindkét példa felemelte a közvetlenül a géppel a JavaScript programozók .

Megjegyzendő, hogy ez különbözik a 0.8 specifikáció. A 0.8 specifikáció így nézett ki -, de meg volt jelölve a kísérleti és valószínűleg változni fog, így lesz frissíteni a régi kód:

Fontos - ez 0,8 példa lenne törve az újabb verziók a géppel fordító.

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

var mySize = TShirtSize.Large;
Válaszolt 02/10/2012 10:40
a forrás felhasználó

szavazat
19

Ez már része a nyelvet. Lásd TypeScriptLang.org> alaptípus> enum a dokumentáció ezt. Egy részlet a dokumentációt, hogy hogyan kell használni ezeket enums:

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

Vagy kézi hátlap szám:

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

Akkor is megy vissza az enum név használatával például Color[2].

Íme egy példa arra, hogyan mindez együtt jár:

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();

Ez log:

undefined  
2  
Blue

Mert abban az időben az írás ezt a géppel Játszótér fog generálni ezt a kódot:

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();
Válaszolt 17/08/2015 13:23
a forrás felhasználó

szavazat
14

Csak egy megjegyzés, hogy lehet egy id / string enum a következő:

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


}
Válaszolt 05/10/2012 00:29
a forrás felhasználó

szavazat
6

frissítés :

Amint @ iX3, írógéppel 2.4 már támogatja az enum szálakat.

Lásd: Hozzon létre egy enum string értékeket géppel


Eredeti válasz:

Karakterlánc tag értékek géppel csak akkor teszi lehetővé a számokat enum tagja értékeket. De van néhány megoldás / hack akkor végre;

1. megoldás:

másolt: https://blog.rsuter.com/how-to-implement-an-enum-with-string-values-in-typescript/

Van egy egyszerű megoldás: csak a leadott szövegkonstans bármilyen kiosztása előtt:

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

oldat 2:

másolt: https://basarat.gitbooks.io/typescript/content/docs/types/literal-types.html

Használhatja a szövegkonstans mint egy típust. Például:

let foo: 'Hello';

Itt létrehoztunk egy változót nevű ize, hogy csak akkor engedi a szó értéke „Hello” kell hozzárendelni. Ezt bizonyítja az alábbi:

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

Ezek nem túl hasznos a saját, de lehet kombinálni típusú unió hozzon létre egy erős (és hasznos) absztrakció pl:

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

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

move(1,"North"); // Okay
move(1,"Nurth"); // Error!
Válaszolt 22/11/2016 11:30
a forrás felhasználó

szavazat
1

Enums géppel:

Enums kerülnek a géppel nyelvet, hogy határozza meg a konstansok. Használata enums teheti életünket könnyebbé. Ennek az az oka, hogy ezek az állandók gyakran könnyebb olvasni, mint az érték, amelyet az enum képvisel.

Létrehozása enum:

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

Ez a példa a géppel docs elmagyarázza szépen hogyan enums működik. Figyeljük meg, hogy az első enum érték (Fel) inicializálja 1. Minden az alábbi tagjai számának enum ezután auto növekszik ettől értékét (azaz lefelé = 2, Left = 3, Jobb = 4). Ha nem inicializálja az első érték 1 enum indulna 0, majd auto növekmény (azaz lefelé = 1, Bal = 2, Jobb = 3).

Segítségével enum:

Mi lehet hozzáférni értékeit enum a következő módon:

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

Figyeljük meg, hogy ez a módja már sokkal leíró ahogy írunk a kódot. Enums alapvetően megakadályozzák, hogy a bűvös szám (számok, amelyek képviselik egység, mert a programozó adott értelmet nekik egy bizonyos kontextusban). Mágikus számok rosszak, mert a következő okok miatt:

  1. Meg kell gondolni nehezebb, akkor először meg kell fordítani a számot az egység előtt tudjuk esetlapú kódunkat.
  2. Ha áttekintjük a kódot hosszú idő után, vagy más programozók át a kódolással, nem feltétlenül tudja, hogy mit kell érteni ezeket a számokat.
Válaszolt 15/11/2018 21:00
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more