Nasıl daktilo tipi gibi enum oluşturmak için?

oy
84

Ben typescript için Google haritaları API için bir tanım dosyası üzerinde çalışıyorum.

Ve ben tip örn gibi bir enum tanımlamak gerekir. google.maps.Animationbu iki özelliği bulunur: BOUNCEve DROP.

Bu nasıl daktilo yapılmalıdır?

Oluştur 02/10/2012 saat 10:29
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
101

Typescript 0.9+ çeteleler için teknik özelliğe sahiptir:

enum AnimationType {
    BOUNCE,
    DROP,
}

son virgül isteğe bağlıdır.

Cevap 02/10/2012 saat 10:45
kaynak kullanıcı

oy
56

Typescript 0.9 (şu anda bir alfa verilen) olarak, bu gibi bir numaralama tanımı kullanabilir:

enum TShirtSize {
  Small,
  Medium,
  Large
}

var mySize = TShirtSize.Large;

Varsayılan olarak, bu numaralandırma sırasıyla 0, 1 ve 2 atanacaktır. Açıkça bu sayıları ayarlamak istiyorsanız, enum bildiriminin bir parçası olarak bunu yapabilirsiniz.

açık üyelerle 6.2 Enumeration Listeleme

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

var mySize = TShirtSize.Large;

Bu örneklerden her ikisini doğrudan dışarı kaldırdı JavaScript Programcılar için typescript .

Bu 0.8 tarifnamede farklı olduğuna dikkat ediniz. 0.8 spesifikasyonu böyle görünüyordu - ama o kadar deneysel ve değişme olasılığı kutlandı, bu nedenle herhangi bir eski kodunu güncellemek gerekecek:

Yasal Uyarı - bu 0.8 örnek typescript derleyici yeni sürümlerinde dökümü yapılır.

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

var mySize = TShirtSize.Large;
Cevap 02/10/2012 saat 10:40
kaynak kullanıcı

oy
19

Bu artık dilin bir parçasıdır. Bkz TypeScriptLang.org> Temel Türleri> enum bu konuda belgeleri için. Bu Çeteleler nasıl kullanılacağına dair belgeler bir alıntı:

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

Veya manuel arka sayılarla:

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

Ayrıca örneğin kullanarak geri enum ismi gidebilirsiniz Color[2].

İşte bütün bunlar biraraya giderse nasıl bir örnek:

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

Bu kaydeder:

undefined  
2  
Blue

Çünkü bu yazı anda typescript Bahçesi bu kodu oluşturur:

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();
Cevap 17/08/2015 saat 13:23
kaynak kullanıcı

oy
14

Bir başka not o aşağıdaki ile kimliği / Dize sıralaması yapabilir:

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


}
Cevap 05/10/2012 saat 00:29
kaynak kullanıcı

oy
6

Güncelleme :

@ IX3 tarafından belirtildiği gibi, typescript 2.4 enum dizeleri desteği vardır.

Bkz: daktilo dize değerleri ile bir enum oluştur


Orijinal cevap:

Dize üyesi değerleri için typescript sadece enum üye değerler olarak tanır. Ama uygulayabileceğiniz birkaç çözümler / kesmek vardır;

Çözüm 1:

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

Basit bir çözüm var: Sadece atamadan önce herhangi bir hazır bilgi dizesi dökme:

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

Çözelti 2:

: kopyalanan https://basarat.gitbooks.io/typescript/content/docs/types/literal-types.html

Bir tür olarak değişmez bir dize kullanabilirsiniz. Örneğin:

let foo: 'Hello';

Burada biz sadece edebi değeri 'Merhaba' atanabilecek sağlayacak bir değişken olarak adlandırılan foo oluşturduk. Bu, aşağıda gösterilmiştir:

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

Onlar kendi başlarına çok kullanışlı olmayan ancak güçlü (ve kullanışlı) soyutlama örneğin oluşturmak için bir tür birliğe birleştirilebilir:

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

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

move(1,"North"); // Okay
move(1,"Nurth"); // Error!
Cevap 22/11/2016 saat 11:30
kaynak kullanıcı

oy
1

typescript numaralamalar:

Numaralamalar adında bir dizi sabiti tanımlamak için typescript diline konur. Kullanılması Çeteleler hayatımızı kolaylaştırabilir. Bunun nedeni bu sabitler genellikle enum temsil değerden daha kolay okunur olmasıdır.

Bir enum Oluşturma:

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

Typescript dokümanlardan Bu örnek çok güzel çeteleler nasıl çalıştığını açıklar. İlk enum değeri (Yukarı) numaralı enum 1. Tüm aşağıdaki üyeleri ile başlatılır o Bildirimi sonra olan artırılır oto (Sol = 3, Sağ = 4 yani Aşağı = 2) Bu değerden. Biz 1 ile ilk değerini başlatılamadı olmadıysa enum sonra otomatik artışı (yani Aşağı = 1, Sol = 2, Sağ = 3) 0'dan başlamalı ve olacaktır.

Bir enum kullanarak:

Biz şu şekilde enum değerleri erişebilir:

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

Biz çok daha fazladır bu şekilde dikkat edin açıklayıcı bir şekilde bizim kod yazmak. Numaralamalar temelde kullanmamızı engeller sihirli numaralar (programcı belli bir bağlamda onlara bir anlam vermiştir, çünkü bazı varlığı temsil sayılar). Sihirli numaralar aşağıdaki nedenlerden dolayı kötü:

  1. Biz zor düşünmek gerekir, öncelikle bizim koduyla ilgili ikna edebilirim önce bir varlık numarayı çevirmek gerekiyor.
  2. biz uzun süre sonra bizim kodu gözden veya başka programcılar bizim kodu gözden varsa, bunlar mutlaka bu rakamlar ile ne kastedildiği bilmiyorum.
Cevap 15/11/2018 saat 21:00
kaynak kullanıcı

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