const reducer = (state: Draft<State>, action: Actions) => {
if (action.type === 'reset') {
return defaultState;
}
if (action.type === 'update') {
const update = action.update;
update(state);
}
};
export const useSettingsStore = create(
persist(immer(redux<Draft<State>, Actions>(reducer, defaultState)), {
name: SETTINGSKEY,
storage: persistStorage,
}),
);
// 其中 Redux 的声明是这样的
type Redux = <T, A extends Action, Cms extends [StoreMutatorIdentifier, unknown][] = []>(reducer: (state: T, action: A) => T, initialState: T) => StateCreator<Write<T, ReduxState<A>>, Cms, [['zustand/redux', A]]>;
这是一段 zustand 的代码,用到了 persist, immer, redux 这三个中间件,目前功能上是没有问题的。
因为使用了 immer,所以 reducer 函数中可以直接通过代理的 state 来修改数据。这样会导致 reducer 函数的返回值允许是 undefined。因为可以返回 undefined,会导致 redux 的类型错误,由于 Redux 的声明是库中的,不好直接修改,在这种情况下应该怎么比较好地屏蔽掉类型错误?