缺少“ U”的类型注释

时间:2019-10-01 20:45:32

标签: flowtype

以下代码可以正常工作,但出现Flow错误:

    case UPDATE_USER: {
      return {
        ...state,
        users: state.users.map((user) => {
          if (user.id === action.id) {
            return {...user, [action.propName]: action.payload};
          } else {
            return user;
          }
        })
      };
    }

确切的消息是这样的:

<U>(
  callbackfn: (
    value: User,
    index: number,
    array: Array<User>
  ) => U,
  thisArg?: any
) => Array<U>

any

Missing type annotation for `U`. `U` is a type parameter declared in  function type [1] and was implicitly instantiated at call of method `map` [2].Flow(InferError)

我怀疑问题可能与我为Reducer定义操作类型的方式有关:

type ToggleModalAction = {type: typeof TOGGLE_MODAL};
type CancelRequestAction = {type: typeof CANCEL_REQUEST, payload: boolean};
type UpdateCompanyAction = {type: typeof UPDATE_COMPANY, payload: number};
type ResetStateAction = {type: typeof RESET_STATE};
type AddUserAction = {type: typeof ADD_USER, isDirty: boolean};
type UpdateUserAction = {type: typeof UPDATE_USER, id: number, propName: string, payload: string | number};
type RemoveUserAction = {type: typeof REMOVE_USER, id: number};

我已经尝试了几种方法来解决它,但是没有任何效果。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您似乎需要提供map的返回值

case UPDATE_USER: {
      return {
        ...state,
        users: state.users.map((user): User => {
          if (user.id === action.id) {
            return {...user, [action.propName]: action.payload};
          } else {
            return user;
          }
        })
      };
    }