2016-01-26 27 views
6

bazı kamu alanları dekore ile ben, daktilo aşağıdaki küçük sınıf var:Yansıma API'sini kullanarak TypeScript'te dizi öğesi türünü nasıl alabilirim?

class Company { 
    @dataMember 
    public name: string; 

    @dataMember 
    public people: Person[]; 
} 

class Person { 
    // ... 
} 

reflect metadata kullanarak, ben Firma özelliklerinin adı ve kişi türlerini belirleyebilirsiniz: bunlar yapıcı fonksiyonları vardır Beklenen ve mantıksal olan sırasıyla ve Dizisi.

Benim mülküm dekoratör fonksiyonu:

function decorate(target: Object, propertyKey: string | symbol): void { 
    var reflectType = Reflect.getMetadata("design:type", target, propertyKey); 
    // ... 
} 

Ama nasıl elemanları dizinin türünü (yapıcı işlevi) belirleyebilir? Bu mümkün mü? Yukarıdaki örnekte, Person olmalıdır.


Not: Ben örnekleme önce tip referansı gerekir ve bu nedenle, dinamik dizi öğeleri kullanarak türünü belirlemek mümkün değildir: hayır dizi öğeler vardır, hatta bir Array örneği yoktur.

cevap

3

Şimdi bunun mümkün olduğunu düşünmüyorum. Oluşturulan js dosyasını görürseniz, herhangi bir şey dizisi için, tür hakkında herhangi bir bilgi olmadan Array türü ile meta veri oluşturur. İçin

__decorate([ 
    dataMember_1.dataMember, 
    __metadata('design:type', Array) 
], Company.prototype, "people", void 0); 

yerleşik türleri, bu sorunu çözme düşünebildiğim tek yönlü dekoratör kendisi ve dekoratör kodundaki özel mantığı yazılı türünü geçmektir.Özel nesneler için, dekoratör çağrısı tetiklendiğinde çoğu zaman modül tam olarak yüklenmez. Yani, bir yolu sınıf adını geçmek ve daha sonra ayrıştırmaktır.

@dataMember("People") 
people: People[] 
İlgili konular