如何将 JS Flow 类型与 Redux reducers 和 lodash 一起使用?
How to use JS Flow types with Redux reducers and lodash?
我可以输入我的动作、我的初始状态和普通的 reducer,但是当一个 reducer returns 包含第三方实用程序库 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: {},
};
适用于流程的减速器案例:
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 作为内置流支持的文本编辑器,流在该行下划线,'goals: _.concat(state.goals, action.data),' 带有一条黄色消息,上面写着类型覆盖率,未被流覆盖。
如何为这些使用 lodash 的代码行获得适当的流覆盖?
您需要为 lodash 安装库定义,否则 Flow 无法知道它做了什么。
最简单的方法是通过 flow-typed
。该页面上的说明应该足以让您入门。基本上,它是一个工具,用于查找用户为 npm 包提供的库定义并将它们放入您的存储库中,以便 Flow 可以使用它们。
我可以输入我的动作、我的初始状态和普通的 reducer,但是当一个 reducer returns 包含第三方实用程序库 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: {},
};
适用于流程的减速器案例:
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 作为内置流支持的文本编辑器,流在该行下划线,'goals: _.concat(state.goals, action.data),' 带有一条黄色消息,上面写着类型覆盖率,未被流覆盖。
如何为这些使用 lodash 的代码行获得适当的流覆盖?
您需要为 lodash 安装库定义,否则 Flow 无法知道它做了什么。
最简单的方法是通过 flow-typed
。该页面上的说明应该足以让您入门。基本上,它是一个工具,用于查找用户为 npm 包提供的库定义并将它们放入您的存储库中,以便 Flow 可以使用它们。