Typescript 如何使用Redux Promise中间件处理分派的返回类型?

Typescript 如何使用Redux Promise中间件处理分派的返回类型?,typescript,redux,redux-promise-middleware,Typescript,Redux,Redux Promise Middleware,Redux Promise中间件似乎可以处理操作负载的承诺解析。例如,考虑这个动作创建者,使用承诺>代码>作为有效载荷: 导出默认类ActionCreator{ 公共静态fetchAllUsers():FetchAction{ 返回{ 类型:actionTypes.FETCH\u所有用户, 有效负载:获取(“api.com/users”) }; } } 当使用此操作创建者时,TypeScript需要一个操作返回的数据,而不是由于redux承诺中间件而实际返回的承诺 因此,以下代码将不会编译,因

Redux Promise中间件似乎可以处理操作负载的承诺解析。例如,考虑这个动作创建者,使用<代码>承诺>代码>作为有效载荷:

导出默认类ActionCreator{
公共静态fetchAllUsers():FetchAction{
返回{
类型:actionTypes.FETCH\u所有用户,
有效负载:获取(“api.com/users”)
};
}
}
当使用此操作创建者时,TypeScript需要一个
操作
返回的数据,而不是由于redux承诺中间件而实际返回的
承诺

因此,以下代码将不会编译,因为类型“Action”上不存在
Property'then'。

dispatch(ActionCreators.fetchAllUsers())
。然后(响应=>{
//做些有反应的事情
})
Typescript需要返回的属性,如
有效负载
类型
,这些属性实际上不会返回,因为承诺已经被处理并实际返回

。然后
就可以使用了,但是typescript不会编译,因为它需要其他东西


我想问题是:如何编写正确的键入来处理redux承诺中间件操作,同时为redux'
connect
-函数提供
mapDispatchToProps
等的正确分派类型。

您可以使用条件类型。 例如

导出接口BaseAction{
类型:字符串;
有效载荷:TPayload;
}
导出接口调度{
(行动:T):
行动?承诺:T

}

我对redux很陌生,但这是否违反了redux的纯函数原则?如果有效负载是从服务器获取数据的承诺,那么处理该有效负载的reducer就不能是纯函数,因为结果不是确定性的。这是真的。这使得它更加恼人,因为没有明确的方法来使用这个中间件。我们正在考虑另一个解决方案。你找到这个问题的解决方案了吗?我遇到了同样的问题,我找不到解决办法。在我的例子中,我不能使用
dispatch(…).catch
表示法。它在no中表示
类型错误:类型“{Type:string;payload():Promise;}”上不存在属性“catch”
@wired\u,因为中间件接受包含Promise有效负载的原始操作,发送立即的
挂起的
操作,然后,一个
实现了
/
拒绝了
操作,这取决于该承诺会发生什么。这些行为都是纯粹的和确定性的,它们实际上是经过还原的。
export interface BaseAction<TPayload> {
   type: string;
   payload: TPayload;
}

export interface Dispatch {
    <T extends BaseAction<any>>(action: T): 
         T extends BaseAction<Promise<infer R>> ? Promise<R>:  T