Redux Promise中间件似乎可以处理动作有效载荷的承诺解析。例如,考虑使用Promise
作为有效负载的动作创建者:
export default class ActionCreators {
public static fetchAllUsers(): FetchAction {
return {
type: actionTypes.FETCH_ALL_USERS,
payload: fetch("api.com/users")
};
}
}
使用此动作创建器时,TypeScript期望返回Action
的数据,而不是由于redux-promise-middleware而实际返回的Promise
。
因此,以下代码将无法编译,因为Property 'then' does not exist on type 'Action'.
dispatch(ActionCreators.fetchAllUsers())
.then(response => {
// do something with response
})
Typescript期望返回诸如payload
和type
之类的属性,实际上不会返回这些属性,因为Promise已经被处理并且实际上已经被返回。
.then
可以使用了,但是打字稿因为需要其他东西而无法编译。
我想问题是:如何编写正确的类型来处理redux-promise-middleware动作,同时为redux的connect
-函数提供mapDispatchToProps
等的正确分派类型。
答案 0 :(得分:0)
您可以使用条件类型。 例如
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
}