【发布时间】:2025-02-22 05:05:02
【问题描述】:
我正在学习 Typescript,我正在尝试实现一个简单的 React/Redux 应用程序。当我使用同步操作时,它工作正常,但问题在于异步操作。我正在关注官方的 redux 教程。
首先我声明会话的状态
export interface UserSessionState {
loggedIn: boolean;
}
然后我声明动作的接口
interface UpdateSessionAction {
type: 'USER_LOGIN';
payload: boolean;
}
我用联合类型导出它们
export type UserActionTypes = UpdateSessionAction;
然后我有实际的行动
export function updateSession(loggedIn: UserSessionState) {
return {
type: 'USER_LOGIN',
payload: loggedIn,
};
}
我有一个虚假的 api 调用
function api() {
return Promise.resolve(true);
}
最后是登录
export const userLogin = (): ThunkAction<
void,
{},
{},
AnyAction
> => async (dispatch: ThunkDispatch<{}, {}, AnyAction>) => {
const res = await api();
dispatch(updateSession({ loggedIn: res }));
};
在reducer中我只是初始化状态
initialState: UserSessionState = {loggedIn: false}
然后我为 reducer 做正常的 redux 工作。
最后在我的商店中,我调用了检查状态的初始操作
store.dispatch(userLogin());
我不断收到此错误:
Argument of type 'ThunkAction<Promise<void>, {}, {}, AnyAction>' is not assignable to parameter of type 'AnyAction'.
Property 'type' is missing in type 'ThunkAction<Promise<void>, {}, {}, AnyAction>' but required in type 'AnyAction'.
我错过了type,但我不知道我做错了什么。
【问题讨论】:
-
在更新会话中,您返回一个类型为 USER_LOGIN 的操作,但这不是界面中的字符串 - 您是否在其他地方声明过?如果不是,您将希望将其设为字符串
-
是的,这是一个导出的普通常量
export const USER_LOGIN = 'USER_LOGIN';,我编辑了我的问题只是为了清楚起见,谢谢
标签: javascript reactjs typescript redux