打字稿:如何在接口中的字符串索引签名定义中引用 属性 名称
Typescript: How to reference property name in an string index signature definition in an interface
插图
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
关键字引用相同的界面!这让类型亲和力很大!而且打字精度很高!
如何从索引签名中引用并获取同一行的 属性 名称?
更新
我注意到我刚遇到
An index signature parameter type must be either 'string' or 'number'.ts(1023)`
错误!
然后我将代码更改为
type IMessageHandlers = {
[eventName in keyof IEventDef]: (data: /*REF_THE_PROP_NAME?*/) => void
}
我要回答这个问题吗?
实际上你快到了。 eventName
拥有你想要的类型。
type IMessageHandlers = {
[eventName in keyof IEventDef]: (data: eventName) => void
}
插图
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
关键字引用相同的界面!这让类型亲和力很大!而且打字精度很高!
如何从索引签名中引用并获取同一行的 属性 名称?
更新
我注意到我刚遇到
An index signature parameter type must be either 'string' or 'number'.ts(1023)`
错误!
然后我将代码更改为
type IMessageHandlers = {
[eventName in keyof IEventDef]: (data: /*REF_THE_PROP_NAME?*/) => void
}
我要回答这个问题吗?
实际上你快到了。 eventName
拥有你想要的类型。
type IMessageHandlers = {
[eventName in keyof IEventDef]: (data: eventName) => void
}