【发布时间】:2016-02-23 12:43:50
【问题描述】:
总而言之,是否可以有一个接口声明一些基本属性,但不限制附加属性?这是我目前的情况:
我正在使用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>() 之类的类型。这样的事情可能吗?
【问题讨论】:
标签: typescript