typescript 型别'MyType'无法指派给型别'WritableDraft< MyType>'

raogr8fs  于 2022-12-05  发布在  TypeScript
关注(0)|答案(2)|浏览(243)

我使用@reduxjs/toolkit,我的状态包含:allSlides: ISlide[];
当我试图改变allSlides中的任何东西时,比如ex。

setAllSlides(state, action: PayloadAction<ISlide[]>) {
  state.allSlides = action.payload;
},
storeNewSlide(state, action: PayloadAction<ISlide>) {
  state.allSlides.push(action.payload);
},

出现TS错误

Type 'ISlide' is not assignable to type 'WritableDraft<ISlide>'

我在更改基元值数组或对象中的一个属性时没有问题,但我不知道如何正确更改整个数组或数组中的特定对象。

dwbf0jvd

dwbf0jvd1#

必须在操作中添加类型
例如:

export const storeNewSlide = createAsyncThunk(
  "slides/storeNewSlide",
  async (slide: ISlide) => {
    return {
      slide,
    };
  }
);

然后在allSlides中:

storeNewSlide(state, action: PayloadAction<ISlide>) {
  state.allSlides.push(action.payload.slide);
},

幻灯片阵列也是如此

bcs8qyzn

bcs8qyzn2#

有过类似的问题,我认为redux不喜欢状态对象的直接变异。
所以传播算子帮我解决了

setAllSlides(state, action: PayloadAction<ISlide[]>) {
  state = { ...state, allSlices:action.payload };
},
storeNewSlide(state, action: PayloadAction<ISlide>) {
  state = { ...state, allSlices: [...state.allSlices, action.payload } ];
},

相关问题