javascript - 如何将 JS Flow 类型与 Redux reducer 和 lodash 结合使用?

标签 javascript reactjs types redux flowtype

我可以输入我的操作、初始状态和普通的 reducer ,但是当 reducer 返回包含第三方实用程序库 lodash 的状态切片时,Flow 似乎无法检测到它:

设置:

// @flow
import _ from 'lodash'
import constants from './constants';

type initialStateType = {
  authenticating: boolean,
  authenticated: boolean,
  goals: Array<?Object>,
  user: Object
}

type genericAction = {
  type: string,
  goals?: Array<?Object>,
  data?: Object | Array<mixed>,
  user?: Object,
  goalId?: ?number,
  status?: boolean,
}

export const initialState: initialStateType = {
  authenticating: false,
  authenticated: false,
  goals: [],
  user: {},
};

与流程配合使用的 reducer 案例:

export function globalReducer(state: initialStateType = initialState, action: genericAction) {
  switch (action.type) {
    // Authentication
    case constants.AUTHENTICATING:
      return Object.assign({}, state,
        {
          authenticating: action.status,
        }
      );
...
    case constants.USER_EDITED:
    case constants.USER_FETCHED:
      return Object.assign({}, state,
        {
          user: action.user,
        }
    );

reducer 不适用于流程:

case constants.GOAL_CREATED:
      return Object.assign({}, state,
        {
          goals: _.concat(state.goals, action.data),
        }
      );
...
 case constants.GOAL_DELETED:
  return Object.assign({}, state,
    {
      goals: _.filter(state.goals, (value, index) => {
        return value.id !== action.goalId;
      }),
    }
  );

使用 Nuclide 作为内置流支持的文本编辑器,流会在“目标:_.concat(state.goals, action.data)”行下划线,并带有一条黄色消息,显示类型覆盖范围,未被流覆盖。

如何为使用 lodash 的这些代码行获得适当的流量覆盖?

Type error from Flow

最佳答案

您需要安装 lodash 的库定义,否则 Flow 无法知道它的作用。

最简单的方法是通过 flow-typed 。该页面上的说明应该足以帮助您入门。基本上,它是一个工具,可以查找用户贡献的 npm 包库定义,并将它们放入您的存储库中,以便 Flow 可以使用它们。

关于javascript - 如何将 JS Flow 类型与 Redux reducer 和 lodash 结合使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43572128/

相关文章:

javascript - 如何使用 jquery 为 slider 创建缩略图

reactjs - React Router v4 多个查询字符串

c# - 强制类型分配和强类型分配之间有区别吗?

python - 函数参数类型设置返回 SyntaxError

javascript - 当它也具有 runat ="server"时,如何使用 JavaScript 更改 html <param> 值属性

javascript - 检查 CSS 类是否具有特定属性

reactjs - 如何在 TypeScript 中向 super React 组件添加 Prop ?

javascript - 如何在 DraftJS 的 Anchor 标签中显示子组件?

Go errors : Is() and As() claim to be recursive, 是否有实现错误接口(interface)并支持此递归的任何类型 - 无错误?

javascript - 在 HTML 5 Canvas 中多点触控捏合、平移、缩放