Reactjs 如何在redux工具包中正确使用元类型的PayloadAction?

Reactjs 如何在redux工具包中正确使用元类型的PayloadAction?,reactjs,typescript,redux,react-redux,redux-toolkit,Reactjs,Typescript,Redux,React Redux,Redux Toolkit,简化示例 从'@reduxjs/toolkit'导入{createSlice,PayloadAction}; 蛋糕类型={ 风味:串; 尺寸:S’|‘M’|‘L’; }; 常量initialState:{all:Cake[];meta:{currentPage:number}}={ 全部:[], 元:{ 当前页面:0, }, }; const cakeSlice=createSlice{ 名字:'蛋糕', 初始状态, 减速器:{ 费考尔 状态 操作:PayloadAction, { state

简化示例

从'@reduxjs/toolkit'导入{createSlice,PayloadAction}; 蛋糕类型={ 风味:串; 尺寸:S’|‘M’|‘L’; }; 常量initialState:{all:Cake[];meta:{currentPage:number}}={ 全部:[], 元:{ 当前页面:0, }, }; const cakeSlice=createSlice{ 名字:'蛋糕', 初始状态, 减速器:{ 费考尔 状态 操作:PayloadAction, { state.all=action.payload; state.meta=action.meta; }, }, };
导出默认cakeSlice RTK的默认行为是仅使用一个参数和一个有效负载属性创建操作创建者。TS注释不能修改此行为,因为TS注释对运行时行为没有影响

可以使用定义覆盖此默认行为的函数。 此函数与具有相同的签名和行为,因此您可以在其中找到大多数相关文档

在你的特定情况下,你会想要一些类似于

const cakeSlice = createSlice({
  name: 'cake',
  initialState,
  reducers: {
    fetchAll: {
      reducer(
        state,
        action: PayloadAction<Cake[], string, { currentPage: number }>
      ) {
        state.all = action.payload
        state.meta = action.meta
      },
      prepare(payload: Cake[], currentPage: number) {
        return { payload, meta: { currentPage } }
      }
    }
  }
})


这是给你的

谢谢。我听从了你的建议,但不幸的是,我仍然有同样的问题属性“meta”在类型“{payload:any;type:string;}”中丢失,但在类型“{meta:{currentPage:number;};};};”中是必需的,在这个代码沙盒中工作得很好:在TS游戏中,也可以将其编辑为您使用的TS的哪个版本?我使用的是typescript 3.7.5,这非常奇怪。我的意思是,它肯定像在操场和代码沙盒中看到的那样工作。有任何异常的tsconfig设置吗?类似于禁用或类似的东西?谢谢您的时间。这是我的tsconfig.json你最终解决了这个问题吗?RTK有没有更新来解决这个问题?我想最新版本已经解决了这个问题@ksav