我有一个界面。
interface Actions {
onSearchByAddress: (s: State, p: string) => State
onSetSalesType: (s: State, p: string[]) => State
}
我想生成另一个具有相同功能名称但功能签名不同的接口(或类型)。
函数签名应接受第二个参数作为第一个参数,并返回void
。
interface ConnectedActions {
onSearchByAddress: (p: string) => void
onSetSalesType: (p: string[]) => void
}
此刻我被困在这里
type ConnectedActions = {
[P in keyof Actions]: Actions[P]
}
答案 0 :(得分:3)
您可能希望在映射类型内部使用conditional type来infer每个函数属性的第二个参数,如下所示:
type ConnectedActions = {
[P in keyof Actions]: (
Actions[P] extends (s: State, y: infer Y) => State ? (p: Y) => void : never
)
}
该类型等同于
type ConnectedActions = {
onSearchByAddress: (p: string) => void;
onSetSalesType: (p: string[]) => void;
}
这就是您要寻找的。希望能有所帮助;祝你好运。