【发布时间】:2019-09-30 15:27:18
【问题描述】:
使用 React Context API,我构建了这个 reducer:
export const usersReducer = (state: UsersState, action: UsersAction) => {
switch (action.type) {
case TOGGLE_MODAL: {
return {
...state,
isModalOpen: !state.isModalOpen
};
}
case CANCEL_REQUEST: {
return {
...state,
isCancelRequest: action.payload
};
}
case UPDATE_COMPANY: {
return {
...state,
companyId: action.payload
};
}
default: {
return state;
}
}
}
相关的动作如下所示:
// Note: `ActionType` = `string`
export const TOGGLE_MODAL: ActionType = 'TOGGLE_MODAL';
export const CANCEL_REQUEST: ActionType = 'CANCEL_REQUEST';
export const UPDATE_COMPANY: ActionType = 'UPDATE_COMPANY';
type ToggleModalAction = {type: typeof TOGGLE_MODAL};
type CancelRequestAction = {type: typeof CANCEL_REQUEST, payload: boolean};
type UpdateCompanyAction = {type: typeof UPDATE_COMPANY, payload: number};
export type UsersAction =
| ToggleModalAction
| CancelRequestAction
| UpdateCompanyAction;
在两个 action.payload 实例上,Flow 是这样说的:
Cannot get `action.payload` because property `payload` is missing in `ToggleModalAction`
我认为我定义我的 3 个“...Action”类型的方式,我可以在必要的地方包含 payload,在不需要的地方排除它,就像在 ToggleModalAction 中一样。
有什么办法解决这个问题吗?
【问题讨论】:
标签: flowtype typing react-context