вернуть полный класс с оператором редуктора
Я получаю сообщение об ошибке:
"Тип '{разрешения: любые; avatarUrl: строка; электронная почта: строка; calendarStatus: строка; roleID: number; lastLoginDate: DateType; mfa: boolean; availability: string | null; outOfOffice: any[]; ... еще 4. ..; name: string;}'отсутствуют следующие свойства типа'User': role, subtitle, searchField, link и 3 more.ts(2740)"
со следующей функцией:
const reducer = (state: User, action: { type: string, value: any | object }): User => {
switch (action.type) {
case 'roleChange':
return { ...state, ...action.value }
case 'permissionsChange':
return { ...state, permissions: { ...state.permissions, ...action.value } }
default:
break
}
return state
}
Проблема в этой строке:
return { ...state, permissions: { ...state.permissions, ...action.value } }
Мое намерение - вернуть полный класс, а не его частичный. Я знаю, что могу ввести его, чтобы вернуть частичного пользователя, но это исправление делает другие части моего кода неработоспособными, поскольку я ссылаюсь на определенные атрибуты в классе User.
1 ответ
Вы распространяете
action.value
вместо присвоения значения свойству. Должно выглядеть так.
const reducer = (state: User, action: { type: string, value: any | object }): User => {
switch (action.type) {
case 'roleChange':
return { ...state, ...action.value }
case 'permissionsChange':
return { ...state, permissions: action.value }
default:
break
}
return state
}
Или, если вы знаете поле внутри разрешений, которые вы хотите обновить
const reducer = (state: User, action: { type: string, value: any | object }): User => {
switch (action.type) {
case 'roleChange':
return { ...state, ...action.value }
case 'permissionsChange':
return { ...state, permissions: { ...state.permissions, someField: action.value } }
default:
break
}
return state
}