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
