Özet olarak, bazı temel özellikleri bildiren ancak ek özellikleri kısıtlamayan bir arabirime sahip olmak mümkün mü?Diğer özelliklere izin veren TypeScript arabirimi
Ben genel bir hareket memurunu tanımlayan Flux pattern, kullanıyorum: Sonra kendi yük türüne sahip bir hareket memurunu oluşturmak
class Dispatcher<TPayload> {
dispatch(arg:TPayload):void { }
}
böyle:
interface ActionPayload {
actionType: string
}
const dispatcher = new Dispatcher<ActionPayload>();
Bu benim şimdiki durum
Artık bazı ek verilerle bir yük yükünün gönderilmesi gereken bazı işlem kodum var, ancak ActionPayload
arabirimi yalnızca actionType
için izin veriyor. Başka bir deyişle, bu kodu:
interface SomePayload extends ActionPayload {
someOtherData: any
}
class SomeActions {
doSomething():void {
dispatcher.dispatch({
actionType: "hello",
someOtherData: {}
})
}
}
ActionPayload
arayüzünü eşleşmeyen someOtherData
çünkü bir derleme hatası verir. Sorun, birçok farklı "eylem" sınıfının aynı dağıtıcıyı yeniden kullanacağıdır, yani someOtherData
iken burada anotherKindOfData
olabilir ve böyle devam eder. Şu anda, bunu yapmak için yapabileceğim tek şey, farklı eylemler gönderileceği için new Dispatcher<any>()
kullanıyor. Tüm eylemler ActionPayload
tabanını paylaşıyor, bu yüzden new Dispatcher<extends ActionPayload>()
veya benzeri bir şeyle sınırlı kalmayı umuyordum. Böyle bir şey mümkün mü?
Teşekkür bakın, bu iyi bir bilgi. Aşırı basitleştirilmiş başlığımı tam olarak yanıtlıyor ... soruyu daha ayrıntılı bir şekilde kullanabilmek için ' 'genişletilmiş nesneyi yalnızca nesneyi harfle yazarak kullanmanın bir yolu çıktı. Garip soru için özür dilerim. Başlığı ve özeti düzeltmeye çalışmalıyım, örneğin, "Bir alt arabirimi nasıl uygulayabilir ve bir nesneyi tam anlamıyla bir süper arabirimi nasıl karşılayabilirim" veya yanıtınızı kabul etmeli miyim? –
Aaron
Biri ya da diğeri benimle iyi. Başlığı değiştirmek, soruları yansıtmak için muhtemelen daha iyidir. – Sebastien