【问题标题】:Why "boolean" becomes "false & true" in PayloadAction in redux-starter-kit?为什么 redux-starter-kit 中 PayloadAction 中的“布尔值”变为“假和真”?
【发布时间】:2019-12-02 06:40:11
【问题描述】:

我在 React 项目中使用 redux-starter-kit。我正在尝试在 createSlice 方法中描述 reducer 中的动作负载类型。

我有两个减速器:

setFetchingMenuItems: (
  state: IPagesState,
  { payload }: PayloadAction<boolean>
) => {
  state.isFetchingMenuItems = payload;
},
setMenuItems: (
  state: IPagesState,
  { payload }: PayloadAction<IMenuItemViewModel[]>
) => {
  state.menuItems = payload;
},

第二个按预期工作。如果我尝试调度 setMenuItems 操作,它只接受 IMenuItemViewModel 数组。

但是,如果我尝试使用 true 或 false 有效负载调度 setFetchingMenuItems 操作,TypeScript 会显示错误:“TS2345:'false' 类型的参数不可分配给'false & true' 类型的参数。”

我错过了什么?

更新:

这是我调度操作的异步方法:

export const fetchMenuItems = () => async (
  dispatch: Dispatch
): Promise<void> => {
  dispatch(setFetchingMenuItems(true));

  try {
    const { value } = await PageService.getMenuItems();

    dispatch(setMenuItems(value));
  } catch (e) {
    console.log(e);
  }

  dispatch(setFetchingMenuItems(false));
};

TypeScript 版本是 3.5.1。

【问题讨论】:

  • 您能否提供代码 sn-p,在哪里调用您的 setFetchingMenuItems 方法?更新 Typescript 版本也是一种选择吗?

标签: typescript redux


【解决方案1】:

问题出在 redux-starter-kit(我有 0.5.1 版)。版本0.6.0 修复了它。所以我更新到 0.6.2,现在它可以工作了。

【讨论】:

    【解决方案2】:

    true | false 的扩展似乎是带有 Typescript 的 active issue。奇怪的是它被扩展为false &amp; true而不是false | true

    要解决您的问题,您可以尝试将 boolean 替换为 false | true

    【讨论】:

    • 现在我有了这个:PayloadAction&lt;false | true&gt;。但什么都没有改变。错误是一样的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2013-06-05
    相关资源
    最近更新 更多