Next.js:在 getServerSideProps 中使用带有 TypeScript 的 next-redux-wrapper 调用 Thunks?

Posted

技术标签:

【中文标题】Next.js:在 getServerSideProps 中使用带有 TypeScript 的 next-redux-wrapper 调用 Thunks?【英文标题】:Next.js: Calling Thunks in getServerSideProps with next-redux-wrapper with TypeScript? 【发布时间】:2020-10-01 14:09:32 【问题描述】:

我正在尝试使用 next-redux-wrapper 商店从 Next.js 中的 getServerSideProps 发送 thunk。但是,我不断收到以下打字稿错误:

TS2345: Argument of type '(dispatch: any) => Promise<any>' is not assignable to parameter of type 'AnyAction'.   Property 'type' is missing in type '(dispatch: any) => Promise<any>' but required in type 'AnyAction'.

我之前没有在 Redux 中使用过 TypeScript,所以不确定我在这里做错了什么......

我的代码如下:

// page.tsx

export const getServerSideProps = wrapper.getServerSideProps(
  async ( store, params ) => 
    store.dispatch(myThunkFunction(params.id));

    return 
      props: 
        id: params.id,
      ,
    ;
  );
// thunks.ts

export const myThunkFunction = id => 
  return async dispatch => 
    ...
  ;
;

【问题讨论】:

【参考方案1】:

It seems to be a known issue with next-redux-wrapper when using redux-thunk,其中next-redux-wrappergetServerSideProps(或getInitialProps,因为这是我正在使用的)返回的dispatch 类型不是ThunkDispatch

我花了很多时间试图找出问题所在,并通过创建类似的应用程序 thunk 调度类型设法找到解决方法

export type AppThunkDispatch = ThunkDispatch&lt;ApplicationState, void, AnyAction&gt;

当在getServerSideProps(或getInitialProps)中使用它时,您只需将store.dispatch 转换为它。

const thunkDispatch = store.dispatch as AppThunkDispatch

我没有用getServerSideProps 尝试过,但我假设传递给它的商店与传递给getInitialProps 的商店相同...

【讨论】:

以上是关于Next.js:在 getServerSideProps 中使用带有 TypeScript 的 next-redux-wrapper 调用 Thunks?的主要内容,如果未能解决你的问题,请参考以下文章

在 Next.js 使用 connect 中间件

将 next.js 添加到组件库中以使用 Next.js 功能

Next.js/Next-Auth/Apollo/GraphQL 设置

Next.js:在 getServerSideProps 中使用带有 TypeScript 的 next-redux-wrapper 调用 Thunks?

在带有 TypeScript 的 Next.js 中使用 getInitialProps

如何在 Next.js 中加载外部图像?