Я работаю с Redux Tool Kit в проекте TypeScript. Одна из вещей, которую позволяет набор инструментов, - это использование мутаций внутри редукторов , хотя никто не изменяет состояние напрямую - когда он использует их вызов createReducer
:
const todosReducer = createReducer([], {
ADD_TODO: (state, action) => {
// "mutate" the array by calling push()
state.push(action.payload)
},
TOGGLE_TODO: (state, action) => {
const todo = state[action.payload.index]
// "mutate" the object by overwriting a field
todo.completed = !todo.completed
},
REMOVE_TODO: (state, action) => {
// Can still return an immutably-updated value if we want to
return state.filter((todo, i) => i !== action.payload.index)
}
})
I Вы определили мое состояние так:
type InitialArticlesState = {
articles: Articles[];
currentArticle: Article | undefined;
tags: TagList;
currentTags: TagList;
currentArticleNumber: number;
totalArticlesNumber: number;
currentSearchString: string;
error: string;
};
const initialState: InitialArticlesState = {
articles: [],
currentArticle: undefined,
tags: [],
currentTags: [],
currentArticleNumber: 0,
totalArticlesNumber: 0,
currentSearchString: '',
error: ''
};
Теперь TypeScript жалуется на state.push
здесь:
[articlesReceived.type]: (state, action: PayloadAction<Articles[]>) => {
state.push(action.payload);
},
, говоря
Каков наилучший способ решить эту проблему? Я относительный новичок TS ie, поэтому мне не ясно, с чего начать.
Edit
Казалось бы, когда приложение прибывает в редуктор, состояние является прокси для чего-то другого. Поэтому я не уверен, что типы имеют смысл в этом контексте - то, что определено в коде, не то, что приходит во время выполнения ... или есть способ сделать это?