Tek tür kısıtlaması olan bu örnek gibi genel bir arabirimim var:
export interface IExample<T extends MyClass> {
getById(id: number): T;
}
Tek bir sınırlama yerine birden çok tür kısıtlaması belirlemek mümkün müdür?
Yanıtlar:
Typescript, genel türler için birden fazla miras almak için bir sözdizimi sunmaz. Ancak, Birleşim türlerini ve Kesişim türlerini kullanarak benzer anlamlar elde edebilirsiniz. Senin durumunda, bir kavşak istiyorsun:
interface Example<T extends MyClass & OtherClass> {}
Her iki türden bir Birlik için:
interface Example<T extends MyClass | OtherClass> {}
<T extends MyInterfaceA & MyInterfaceB>
, türün her iki arabirimi de uygulamasını gerektirir.
extends A|B
A OR B'yi extends A & B
genişletir ve ikisini de kapsar! belki de cevabınızda ikisini de belirtmelisiniz ....
Bunun için geçici bir çözüm, bir süper arabirim kullanmak olabilir (bu aynı zamanda "bir arabirimin bir sınıftan miras almasına neden izin verirsiniz" sorusunu da yanıtlar).
interface ISuperInterface extends MyClass, OtherClass {
}
export interface IExample<T extends ISuperInterface> {
getById(id: number): T;
}
Bir sınıftan türetilen bir arayüz hakkındaki yorumu ref ... bir isimde ne var?
Bunu 0.9.0 spesifikasyonunun 3.5 bölümünde buldum:
Arabirim bildirimleri yalnızca adlandırılmış türleri sunarken, sınıf bildirimleri bu adlandırılmış türlerin uygulamalarının örneklerini oluşturan adlandırılmış türleri ve yapıcı işlevleri sunar. Sınıf ve arabirim bildirimleri tarafından tanıtılan adlandırılmış türlerin yalnızca küçük farklılıkları vardır (sınıflar isteğe bağlı üyeleri bildiremez ve arabirimler özel üyeleri bildiremez) ve çoğu bağlamda birbirinin yerine kullanılabilir. Özellikle, yalnızca genel üyelere sahip sınıf bildirimleri, tam olarak arabirim bildirimleri tarafından oluşturulanlar gibi işlev gören adlandırılmış türleri sunar.