总体来说,是否可能有一个声明一些基本属性但不限制附加属性的接口?这是我的当前情况:
我正在使用 Flux模式,它定义了一个通用的调度程序:
我随后使用自己的有效负载类型创建一个调度程序,如下所示:
现在我有一些动作代码,应该用一些附加数据分派有效载荷,但是
我正在使用 Flux模式,它定义了一个通用的调度程序:
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
接口不匹配。问题在于许多不同的“action”类将重用相同的分发器,因此虽然这里是someOtherData
,但可能是那边的anotherKindOfData
等等。目前,我所能做的只是使用new Dispatcher<any>()
,因为会分派不同的操作。不过所有的操作都共享一个基本的ActionPayload
,所以我希望能够像new Dispatcher<extends ActionPayload>()
这样约束类型。这种情况是否可能?
<SomePayload>
。对于这个笨拙的问题,我很抱歉。我应该尝试修复标题和摘要,例如“如何同时使用子接口和对象文字满足超级接口”,还是只接受您的答案? - Aaron Beallstring
就会像你所说的那样。 - zr0gravity7