javascript - Redux-Toolkit extraReducers listade efter reducers orsakar problem (TS2322-fel)


Problem

Jag använder Redux-Toolkit och jag har ett problem med koden nedan. När extraReducers utelämnas fungerar min kod bra. När extraReducers listas efter reducers får jag ett fel (visas nedan). När extraReducers listas före reducers fungerar min kod bra. Vad missar jag här?

type Item = { id: string, name: string }

export const itemsAdapter = createEntityAdapter<Item>();
const initialState = itemsAdapter.getInitialState();

export const slice = createSlice({
  name: 'items',
  initialState,
  reducers: {  
    itemsAdded(state, action: PayloadAction<{ items: Item[] }>) {
      itemsAdapter.setAll(state, action.payload.items);
    }, 
  },
  extraReducers: (builder) => { /*  },,
});

Felmeddelande

TS2322: Type '(state: WritableDraft<EntityState<Item>>, action: { payload: { items: Item[]; }; type: string; }) => void' is not assignable to type 'CaseReducer<WritableDraft<EntityState<Item>> | undefined, { payload: any; type: string; }> | CaseReducerWithPrepare<WritableDraft<EntityState<Item>> | undefined, PayloadAction<...>>'.
  Type '(state: WritableDraft<EntityState<Item>>, action: { payload: { items: Item[]; }; type: string; }) => void' is not assignable to type 'CaseReducer<WritableDraft<EntityState<Item>> | undefined, { payload: any; type: string; }>'.
    Types of parameters 'state' and 'state' are incompatible.
      Type 'WritableDraft<WritableDraft<EntityState<Item>>> | undefined' is not assignable to type 'WritableDraft<EntityState<Item>>'.
        Type 'undefined' is not assignable to type 'WritableDraft<EntityState<Item>>'.

Svar #1

Jag fixade detta genom att ange en typ för builder-parametern.

extraReducers: (builder: ActionReducerMapBuilder<MyCustomState>) => {
  builder.addCase(myCaseReducer, (state, action) => { /* this is code */ });
}

Detta förhindrar TypeScript från att härleda MyCustomState | undefined

Verkar som en bugg, det här var inte ett problem förrän jag uppdaterade redux-toolkit