總之,是否可以有一個聲明某些基本屬性但不限制其他屬性的接口?這是我目前的狀況:允許其他屬性的TypeScript接口
我使用的是Flux pattern,它定義了一個通用的調度員:
class Dispatcher<TPayload> {
dispatch(arg:TPayload):void { }
}
我然後創建一個調度員用自己的有效載荷類型,像這樣:
interface ActionPayload {
actionType: string
}
const dispatcher = new Dispatcher<ActionPayload>();
現在我有一些動作代碼應該用一些額外的數據調度有效載荷,但ActionPayload
接口只允許actionType
。換句話說,此代碼:
interface SomePayload extends ActionPayload {
someOtherData: any
}
class SomeActions {
doSomething():void {
dispatcher.dispatch({
actionType: "hello",
someOtherData: {}
})
}
}
給出一個編譯錯誤,因爲someOtherData
的ActionPayload
接口不匹配。問題在於許多不同的「行動」類將重新使用同一個調度程序,所以在這裏它可能是someOtherData
,可能是anotherKindOfData
,依此類推。目前,我所能做的就是使用new Dispatcher<any>()
,因爲不同的動作將被調度。儘管如此,所有操作都共享一個基地ActionPayload
,所以我希望能夠約束new Dispatcher<extends ActionPayload>()
之類的類型。有這樣的可能嗎?
謝謝,這是好消息。它完全回答了我的過度簡化的標題......事實證明,通過簡單地轉換對象字面量,可以在我的問題的細節中使用擴展的''。對不起,這個笨拙的問題。我是否應該嘗試修復標題和摘要,例如「如何實現子接口並使用對象字面值滿足超級接口」,或者只是接受你的答案? –
Aaron
其中一個對我來說很好。改變標題可能更好地反映問題。 – Sebastien