我尝试使用redux-thunk和redux的打字稿。我想将对象传递给任何动作(我正在使用依赖注入,并且需要传递对象服务或字符串)
我得到这个错误;
Overload 1 of 2, '(action: AnyAction): AnyAction', gave the following error.
Argument of type '(dispatch: any, getState: AppState, extraArg: string) => Promise<any>' is not assignable to parameter of type 'AnyAction'.
如下所示:
store.ts:
const middlewares = [
routerMiddleware(history),
thunkMiddleware.withExtraArgument('bar') as ThunkMiddleware<
AppState,
Actions,
string
>
];
const middleWareEnhancer = applyMiddleware(...middlewares);
const store = createStore(
rootReducer(history),
preloadState,
composeWithDevTools(middleWareEnhancer)
);
我尝试发送操作的index.ts是:
(store.dispatch as ThunkDispatch<{}, void, AnyAction>)(getAll());
我的动作文件正常工作:
export const getall = () => async (dispatch: any) => {
try {
dispatch({ type: GETALL_REQUEST });
return dispatch({ type: GETALL_SUCCESS, payload: null });
} catch (e) {
return dispatch({ type: GETALL_FAILURE, error: e });
}
};
我的动作(放入其中的一部分)引发了错误
export const getAll = () => async (
dispatch: any,
getState: AppState,
extraArg: string
) => {....action logic}
然后我得到了错误:
(store.dispatch as ThunkDispatch<{}, void, AnyAction>)(getAll());
纠正错误的最简单方法:
(store.dispatch as ThunkDispatch<AppState, string, AnyAction>)(getAll());
和
export const getAll = () => async (
dispatch: any,
getState: () => AppState,
extraArg: string
) => {....action logic}
ThunkDispatch
接受以下类型参数:S
-状态,E
-扩展arg,A
-动作。因此,您对的使用ThunkDispatch
应与状态和扩展arg的类型匹配。
Thunk action是一个接受以下参数dispatch
的函数:是一个函数,getState
也是一个返回state和的函数extraArg
。因此,请确保这getState
是一个功能。
为了避免dispatch
强制转换,我建议在创建时正确键入商店。当您使用applyMiddleware
哪个接受数组时,应将type参数传递给它。它接受将在应用特拉华州之后使用的调度类型。
const middlewares = [thunk.withExtraArgument("bar")];
const middleWareEnhancer = applyMiddleware<
ThunkDispatch<AppState, string, Actions>
>(...middlewares);
结果,您将获得具有正确类型的调度功能的商店。而且您无需铸造就可以使用它。
store.dispatch(getAll());
工作演示
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句