我正在尝试将TypeScript和Redux工具包安装到现有项目中。然而,我遇到了一个问题,其中configureStore
不提供ThunkDispatch
类型,因此我不能在dispatch
中使用createAsyncThunk
动作。
为了验证这个理论,我创建了一个全新的create-react-app项目。它的store.ts
文件有以下内容:
import { configureStore, ThunkAction, Action } from '@reduxjs/toolkit';
export const store = configureStore({
reducer: {
},
});
export type AppDispatch = typeof store.dispatch;
export type RootState = ReturnType<typeof store.getState>;
export type AppThunk<ReturnType = void> = ThunkAction<
ReturnType,
RootState,
unknown,
Action<string>
>;
AppDispatch
具有以下类型:type AppDispatch = ThunkDispatch<any, undefined, AnyAction> & Dispatch<AnyAction>
然而,在我现有的项目中,我有以下内容:
import { configureStore } from "@reduxjs/toolkit";
export const store = configureStore({
reducer: {},
});
export type AppDispatch = typeof store.dispatch;
export type RootState = ReturnType<typeof store.getState>;
AppDispatch
的类型只是type AppDispatch = Dispatch<AnyAction>
。
这个项目有很多依赖项,但我有以下几个:
"@reduxjs/toolkit": "^1.8.1",
"react-redux": "^8.0.1",
"typescript": "^4.6.4",
我没有@types/react-redux
,因为8.0.0的发行说明似乎表明,由于项目现在是在TypeScript中,这应该不再是必要的。我已经查看了我的package-lock.json
,据我所知,没有竞争的redux版本,所以我很困惑。
为什么我错过了ThunkDispatch类型?
如果您的包。Json明确声明redux,请确保将其更新到至少4.0.0。