TypeScript 1.8'de, yalnızca bir dizi sonlu değerden biri olabilen bir türü bildirmenize izin veren "dizgi değişmez türü" adı verilen yeni bir tür eklediler. bunlar vermek örnektir:TypeScript'te bir sınıf içinde bir tür (String literal union) tanımlamak mümkün mü?
type Easing = "ease-in" | "ease-out" | "ease-in-out";
Ancak, bütün örneklerde, tip dış bu kullanılabilir veya diğer adları olmayan satır tanımlandığı sınıfın tanımlandığı ya olup. this question'a verilen cevaplarda (oldukça fazla) açıklandığı gibi, yazım adlarını içeren modüllere yazın.
Projemde, belirli sınıflarla eşleştirilen ve birden çok yerde kullanılan dize değişmezleri için tür takma adlarını tanımlamak istiyorum. Tüketmekte olduğum API'ların yapısı nedeniyle, her birinin aynı ada sahip ancak farklı potansiyel değerlere sahip birden fazla sınıfı vardır. Kodumu düzgün bir şekilde saklamak istiyorum ve yardımcı olabilseydim, öneklerle (MyClassAPropertyValue
, MyClassBPropertyValue
, vb.) Bir dizi küresel türde bildirim içermem.
Yani, sınıf kapsamı içinde bir type
bildirmek için herhangi bir yolu var mı (tercihen harici modüller tarafından tüketilebilecek şekilde)? Değilse, bu kullanım durumunu dolduracak yakın bir ikame veya planlanmış özellik var mı?
Kullanım örneği: Ben altta yatan API verilerini sarmak iki sınıfları
varsayalım. Her sınıf farklı verileri temsil eder, sadece aynı ada sahip bazı özelliklere sahip olurlar.
export class APIObjectA {
// Valid values in APIObjectA
public type Property1Value = "possible_value_A" | "possible_value_B";
public type Property2Value = "possible_value_C" | "possible_value_D";
// Here, "Property1Value" refers to the version in APIObjectA
public get property1(): Property1Value {
// Return value of property1 from underlying API data
}
public get property2(): Property2Value {
// ...
}
}
export class APIObjectB {
// Valid values in APIObjectB
public type Property1Value = "possible_value_E" | "possible_value_F";
public type Property2Value = "possible_value_G" | "possible_value_H";
// In this context, "Property1Value" refers to the version in APIObjectB
public get property1(): Property1Value {
// ...
}
public get property2(): Property2Value {
// ...
}
}
Ve her yerde türleri vardır, böylece daha sonra, ideal olarak, kodu tüketen bulunan belirli bir türdeki başvurmak mümkün olurdu: Ben tanımlayan özelliklerin bir yolu şöyle istiyorum
var myNewValue: APIObjectB.Property1Value = "possible_value_F";
Sanırım ne istediğini anlıyorum, ancak bu tür kullanmayı nasıl amaçladığınızı gösteren bir kod ekleyebilir misiniz? – reduckted