export interface IEventDef {
ready: any,
}
export interface IIPCMessage {
eventType: keyof IEventDef,
data: IEventDef[this['eventType']]
}
interface IMessageHandlers {
[eventName: keyof IEventDef]: (data: ) => void
}
按照插图为接口提供字符串索引签名! 如下:
interface IMessageHandlers {
[eventName: keyof IEventDef]: (data: /*HOW_TO_REF_eventName*/) => void
}
我们如何在示例中引用eventName
?还是索引属性名!在同一行
在我的确切代码中,我想这样做:
interface IMessageHandlers {
[eventName: keyof IEventDef]: (data: IEventDef[thisLineProp]) => void
}
这将给您带来极大的亲和力!可以吗?
为清楚起见,我将在下面介绍此代码段!
export interface IEventDef {
ready: any,
}
export interface IIPCMessage {
eventType: keyof IEventDef,
data: IEventDef[this['eventType']] // <<= here
}
在该示例中,我能够使用this
关键字引用相同的接口!允许很大的类型亲和力!而且它允许很好的键入精度!
如何从索引签名中引用并获取同一行的属性名称?
我注意到我刚刚遇到了
索引签名参数类型必须为'string'或'number'.ts(1023)`
错误!
然后我将代码更改为
type IMessageHandlers = {
[eventName in keyof IEventDef]: (data: /*REF_THE_PROP_NAME?*/) => void
}
我想问这个问题吗?
答案 0 :(得分:2)
实际上您几乎在那里。 eventName
保留您想要的类型。
type IMessageHandlers = {
[eventName in keyof IEventDef]: (data: eventName) => void
}