如何在打字稿中重载可选参数?

时间:2020-09-20 14:10:15

标签: typescript

我有这样的界面:

export interface Actions {
      [ActionEnum.FOO](someParam: {}, payload: string): void
      [ActionEnum.BAR](someParam: {}, payload: PayloadType): void
      [ActionEnum.BAZ](someParam: {}): void
    }

您可以看到第二个参数是可选的。

我有一个功能:

type Dispatch = <K extends keyof Actions, P extends Parameters<Actions[K]>[1]>(type: K,  payload?: P) => ReturnType<Actions[K]>

第一个参数是ActionEnum。其次是来自同一动作的有效载荷。 是工程。如果我通过有效负载,TS会正确检查有效负载的类型。但是,即使有必要,我也可能无法传递有效负载。在这种情况下没有TS错误。

如何对TS说在特定情况下第二个参数是否可选。例如:

Dispatch(ActionEnum.FOO) // error, because we have second parameter in Action
Dispatch(ActionEnum.BAZ) // no error, because we have not second parameter in Action

0 个答案:

没有答案