如何扩展TypeScript接口并推断参数?

时间:2019-03-23 02:14:13

标签: typescript

我有一个界面。

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]
}

1 个答案:

答案 0 :(得分:3)

您可能希望在映射类型内部使用conditional typeinfer每个函数属性的第二个参数,如下所示:

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;
}

这就是您要寻找的。希望能有所帮助;祝你好运。