2017-05-24 31 views
5

Dize değişmezi için olası tüm değerlerin tam listesini almam gerekiyor.Dize değişmez tür değerleri dizisi alın

type YesNo = "Yes" | "No"; 
let arrayOfYesNo : Array<string> = someMagicFunction(YesNo); //["Yes", "No"] 

Bunu gerçekleştirmenin herhangi bir yolu var mı?

cevap

1

typescript 2.4 finally released olduğunu. Dize enumları desteği ile artık dize değişmezleri kullanmak zorunda kalmam ve javascript için derleme kodları derlendiğinden bunlara çalışma zamanında erişebilirim (number enums ile aynı yaklaşım).

5

Sayım burada yardımcı olabilir:

enum YesNo { 
    YES, 
    NO 
} 

interface EnumObject { 
    [enumValue: number]: string; 
} 

function getEnumValues(e: EnumObject): string[] { 
    return Object.keys(e).map((i) => e[i]); 
} 

getEnumValues(YesNo); // ['YES', 'NO'] 

type beyan Çalışma zamanı içinde kullanabilirsiniz herhangi bir sembol yaratmaz, sadece tip sisteminde bir takma ad oluşturur. Yani onu bir işlev argümanı olarak kullanmanın bir yolu yoktur.

Eğer YesNo türü için dize değeri bulunan gerekiyorsa (çeteleler dize değerleri TS yet parçası olmayan beri), bir hile kullanabilirsiniz:

const YesNoEnum = { 
    Yes: 'Yes', 
    No: 'No' 
}; 

function thatAcceptsYesNoValue(vale: keyof typeof YesNoEnum): void {} 

Sonra mümkün olsun getEnumValues(YesNoEnum) kullanabilirsiniz YesNoEnum için değerler, yani ['Evet', 'Hayır']. Biraz çirkin ama işe yarayacaktı.

Dürüst olmak gerekirse, ben böyle sadece statik bir değişken ile giderdi:

type YesNo = 'yes' | 'no'; 
const YES_NO_VALUES: YesNo[] = ['yes', 'no']; 
+0

Teşekkür ederiz, ama bu bana yardımcı olmuyor. Dize tabanlı olmak için enum'a ihtiyacım var (muhtemelen Yazı Tip 2.4'te mümkün olacaktır). – Quali

+0

@Quali Fuar noktası, durumu ele almak için bir yol ekledim. –

+0

KirillDmitrenko'nun önerisini denediğimde. Dizim, olmayan değişmez değerlere de izin veriyor. Örneğin, “const YES_NO_VALUES: YesNo [] = ['yes', 'no', 'maybe'];' – jschank