一个 Github 问题表明我们可以TypedAction.defineWithoutPayload
用于此目的,但我找不到任何有关如何这样做的相关示例。
当访问令牌存储在有效负载中时,我使用它进行登录。如果存在令牌,则用户可以访问私人页面。
export const login = (token: string) => typedAction("LOGIN", token);
现在,在注销按钮上,我正在尝试执行一个操作来删除负载中的存储值。在这种情况下,将没有用于分派动作的参数。那么如何编写 typedAction 呢?
如果我使用:
export const logout = () => typedAction("LOGOUT");
我开始在我的减速器的有效负载上收到一个错误,即类型注销时不存在该属性。
这是我的减速器:
export const tokenReducer = (
state: IState['token'] = null,
{ type, payload }: AppAction,
): typeof state => {
switch (type) {
case 'LOGIN':
return payload;
case 'LOGOUT':
return null;
default:
return state;
}
};
Codesandbox:https ://codesandbox.io/s/keen-brook-kntkm ? file =/ src/store/actions/login.ts:50-118
邮箱:c@c.com 密码:check
编辑:
export interface IState {
token: string | null;
}
const initialState: IState = {
token: null
};
如果我使用state: typeof initialState
或state = initialState
按照 IDE 的建议,action.payload 会出错:
Type 'string' is not assignable to type 'IState'.ts(2322)
如果我尝试,state: initialState
那么显然:
'initialState' refers to a value, but is being used as a type here. Did you mean 'typeof initialState'?ts(2749)
``