2015-03-03 48 views
5

'daki bir modülde alıcı/ayarlayıcı, TypeScript projemde AMD modülleri (derleyici bayrağı "--module amd") kullanıyorum. Ben easily use getters/setters on my classes benim modülleri aynı şeyi ama istiyoruz çıkarabilirlerTypeScript

export get abc() : string { 
    return "abc"; 
} 

döner

hata TS1008: Beklenmeyen belirteç; 'modül, sınıf, arayüz, enum, içe aktarma veya ifade' bekleniyor.

ve

export function get abc() : string { 
    return "abc"; 
} 

döner

hata TS1005:. '(' Beklenen

Ne yapıyorum yanlış

+1

olası yinelenen (http://stackoverflow.com/questions/20925921/properties-in-a-module) – Acidic

cevap

7

Yalnızca alıcılar ekleyebilir? ve şu anda bir sınıfa diziciler .

Tür dönüşümü alıcılarda ve ayarlayıcılarda kullanılan kod dönüştürmesi, özelliği nesnelerin prototipine ekler ve bu da, modüller için olduğundan daha fazla anlam ifade eder.

+1

modülleri doğal çok Objects değil mi? Herhangi bir nesne üzerinde getter/setter bulunacağını düşünmüştüm. –

+0

@ daniel.sedlacek nesnenin tanımlanmamış bir prototipine sahip olmadığı zaman değil –

+0

@ daniel.sedlacek Sınıf alıcısı/sınıfları sınıf nesnesi (yani, işlev) değil, sınıf örneğinde kullanılabilir.Bir sınıftaki statik alıcıları/ayarlayıcıları kullanabilir ve sonra tanımı bir modülle birleştirebilirsiniz. Modülün tipi işlev görecektir. –

4

Bu aşağıdaki gibi özel export = ... sözdizimi kullanılarak mümkündür:

class MyModule { 
    get abc() { 
     return "abc"; 
    } 
} 

var myModule = new MyModule(); 
export = myModule; 

Bu modülün API olarak sınıf MyModule hareket bir örneğini sağlar. Sınıfta herhangi bir veri koymak zorunda değilsiniz - sadece işlevlerinizi ona taşıyın ve aksi halde bunları değiştirmeyin. Dezavantajı ise a işlevininişlevini çağırması durumunda this.b() veya myModule.b() (ikinci modülün normal modül aktarımına daha yakın olması) gerekir.

Ayrıca, önce adlandırılmış bir değişken bildirmeniz gerekir. Sadece diyemeyiz:

Hemen ileride ziyaretçilerin başvuru için
export = new MyModule(); // This doesn't work 
0

...

@Daniel Earwicker söyleyerek ve ne dediğini billc.cn @ açıklayan Ne benzer şekilde

, ayrıca bir conflate edebilirsiniz bir ad ile sınıf ve sonra sadece statik yöntem olarak alıcı/ayarlayıcı tanımlayın:

export class X { 
    static get abc():string { 
     return "abc"; 
    } 
} 

export namespace X { 
    // ... other code 
} 

Ama bu size hitap biçimini değiştirmek istemedikçe kitaplığınıza (modül) içinde bir ad alanı ve olacağı anlamına gelir kütüphanenizin özellikleri, hackyapmalısınız @Daniel Earwicker'ın bahsettiği. [Bir modülde Özellikleri]

https://www.typescriptlang.org/docs/handbook/declaration-merging.html