首页 文章

如何使用Redux Promise Middleware处理返回类型的调度?

提问于
浏览
1

Redux Promise Middleware似乎处理动作有效负载的承诺解析 . 例如,考虑使用 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期望返回的属性,如 payloadtype ,实际上没有返回,因为已经处理了promise并且已经返回了ACTUALLY .

.then 已准备好使用,但typescript将无法编译,因为它需要其他东西 .

我想问题是:如何编写正确的打字来处理redux-promise-middleware操作,同时为 mapDispatchToProps 等正确的调度类型提供redux' connect -function .

1 回答

  • 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
    

    }

相关问题