【发布时间】:2017-08-28 09:15:04
【问题描述】:
我有一个用于偏好设置的 Redux reducer,并且我正在使用 Flow Type Checker。我的 reducer 可以采取两种类型的操作。一种用于加载在初始应用程序加载时发生的所有首选项。第二种操作类型发生在用户更新特定偏好时。这是我的减速器的代码。我遇到问题的地方是当我尝试执行 action.prefs.forEach 时,流程会抛出一个错误,提示 ...'prefs': Property not found in 'object type'
// @flow
import {
UPDATE_PREF,
LOAD_PREFS_SUCCESS
} from '../actions/prefs';
export type actionType = {
+type: string,
prefs: Array<{_id: string, value: any}>
} | {
+type: string,
id: string,
value: any
};
export default (state: stateType = {}, action: actionType) => {
switch (action.type) {
case LOAD_PREFS_SUCCESS: {
const newState = {};
action.prefs.forEach(p => {
newState[p._id] = p.value;
});
return newState;
}
case UPDATE_PREF: {
return { ...state, [action.id]: action.value };
}
default:
return state;
}
};
如您所见,我有两种类型的操作。加载所有首选项时,该操作具有一组首选项。 [ { _id: 'color', value: 'blue' } ] 当更新一个偏好时,我得到一个 id 和一个值。那么给我的两个具有不同属性的动作类型,我如何让流不引发关于动作流类型的这种变化的错误?
【问题讨论】: