0

我收到错误:

“类型'{权限:任何;头像Url:字符串;电子邮件:字符串;日历状态:字符串;角色ID:编号;lastLoginDate:日期类型;mfa:布尔值;可用性:字符串| null;outOfOffice:任何[];... 4更多。 ..; 名称:字符串;}' 缺少来自类型“用户”的以下属性:角色、副标题、搜索字段、链接和 3 个更多.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 } }

我的意图是返回全部课程,而不是部分课程。我知道我可以键入它来返回一个部分用户,但是这个修复使我的代码的其他部分无法工作,因为我引用了用户类的某些属性。

4

1 回答 1

0

您正在传播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
}
于 2021-12-15T18:33:11.607 回答