@zlodiak

Почему без указания типа не срабатывает редюсер?

Я использую react-redux + typescript.

Вот простейший редсюер, который я использую:

type msgObjType = {
    name: string
    email: string
    msg: string
}

type msgObjActionType = {
    type: string
    payload: msgObjType
}

const msgReducer = function msgReducer(state = { msgs: [] as Array<msgObjType> }, action: msgObjActionType) {
    switch(action.type) {
        case 'ADD_MSG': {
            state = {
                ...state,
                msgs: [ ...state.msgs, action.payload ]
            };
            break;
        }              
        default:
            return state;
    }
    return state;
}

export const addMsgAC = (msgObj: msgObjType) => {
    return { type: 'ADD_MSG', payload: msgObj }
}

export default msgReducer;

Он срабатывает без проблем. Проблемы начинаются когда я убираю типизацию:

as Array<msgObjType>

В этом случае выводится такое сообщение об ошибке:

Type 'msgObjType[]' is not assignable to type 'never[]'.
  Type 'msgObjType' is not assignable to type 'never'.  TS2322

В чём смысл ошибки? Почему в данном случае наличие типизации критично?
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
@4elentano551
Javascript
Нельзя присвоить msgObjType[] типу never[].)) Определи заранее тип для стейта.
interface IState {
msgs: msgObjType[];
}
const initialState: IState = {
msgs: []
}

const reducer = (state = initialState, ...);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы