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?
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?
Typescript 0.9+ çeteleler için teknik özelliğe sahiptir:
enum AnimationType {
BOUNCE,
DROP,
}
son virgül isteğe bağlıdır.
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;
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();
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};
}
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!
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.
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.
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ü: