如何强制执行类型检查Generic被使用两次相同,同时仍允许它相同?

时间:2017-12-13 07:13:06

标签: typescript redux

假设我以某种方式修改了Redux,而不是使用type:string,现在需要在reducer中调用reducer:function来获取新状态。

现在我想要检查的typescript是我传递的任何有效负载都与reducer的第二个参数兼容。 请查看以下游乐场的代码和评论。

Typescript Playground Link

interface Action<T> {
  reducer: (state: object, payload: T) => object,
  payload: T
}

type Dispatch = (action: Action<any>) => void

什么允许两个有效负载具有不同的值。 我打算创建的是一个类型检查代码,它检查有效负载是否具有reducer期望的正确格式。

上述内容是:

type Dispatch2 = (action: {
    reducer: (state: State, payload: any) => State,
    payload: any
}) => void

不管两个有效载荷是否为任何有效载荷,我希望它们属于同一类型,而不管它们实际上是什么。

1 个答案:

答案 0 :(得分:2)

您可以使用通用函数签名,然后编译器将执行适当的类型检查:

type Dispatch = <T>(action: Action<T>) => void

Link to updated code