【发布时间】:2022-06-22 21:47:02
【问题描述】:
我想在使用 Redux Toolkit 时使用这样的联合类型来表示切片的状态:
type AppState = { loading: true } | { loading: false; data: number };
似乎在 reducer 文件中使用 Immerjs 使我无法在两个 Union 选项之间切换,例如:
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
const initialState: AppState = { loading: true };
export const sampleSlice = createSlice({
name: "sample",
initialState,
reducers: {
setup: (state) => {
return { loading: false, data: 5 };
},
},
});
这给了我以下 Typescript 错误:
Type '(state: WritableDraft<{ loading: true; }>) => { loading: false; data: number; }' is not assignable to type 'CaseReducer<{ loading: true; }, { payload: any; type: string; }> | CaseReducerWithPrepare<{ loading: true; }, PayloadAction<any, string, any, any>>'.
有什么办法可以做到这一点吗?我目前的解决方法是不使用联合类型来表示状态,但我想知道是否有解决方法。我也尝试过不使用布尔值,而是对 loading 键使用字符串文字,但它会产生相同的错误。
【问题讨论】:
标签: javascript reactjs typescript redux-toolkit