【问题标题】:Type annotation for Immutable.js Map when passing to Redux reducer传递给 Redux reducer 时为 Immutable.js Map 键入注释
【发布时间】:2018-10-10 09:03:26
【问题描述】:

我一直在慢慢地将 Flow 类型注解添加到一个小型 Redux 应用程序中。但是,我坚持为减速器中的状态添加注释。

有问题的应用程序使用 Immutable.js,状态参数是Immutable.Map 的实例。尽我所能,我不知道如何注释。

这里是有问题的减速器:

// @flow
import {List, Map, fromJS} from 'immutable';

type Action = {
  type: string,
  content: mixed
};

export default function(state = Map(), action: Action) {
  switch (action.type) {
  case 'ADD_LINK': {
    let links = state.get('links').push(fromJS(action.content));
    return state.set('links', links);
  }
  case 'UPDATE_FILTER':
    return state.set('filter', fromJS(action.content));
  default:
    return state;
  }
}

知道如何为状态添加类型注释作为 Immutable.js 映射吗?我尝试了以下但没有成功,现在我很难过:

import type { Map } from 'immutable';

export default function (state: Map = Map(), action: Action) {

【问题讨论】:

    标签: redux flowtype immutable.js


    【解决方案1】:

    您可以将state 描述如下:

    export default function(state: Map<string, mixed> = Map(), action: Action)
    {
        // ...
    }
    

    另外,还有一种更好的方式来描述Action

    export type Action = {
        type: 'ADD_LINK' | 'UPDATE_FILTER'
      , content: mixed
    };
    

    现在将检测到无效的操作字符串...

    请注意,要调用您的函数,您必须将文字对象显式转换为Map

    let res = blah(Map({foo: 'bar'}), {type: 'ADD_LINK', content: 'blah-blah'});
    

    【讨论】:

    • 我最近也遇到了同样的问题,并且仍在尝试找到我的问题的答案:具有应用程序状态的映射通常具有有限的有效键集,并且由嵌套Maps 也是如此。是否有任何更好的 方式来描述 Flow? :)
    猜你喜欢
    • 2019-02-17
    • 2022-01-13
    • 2018-10-02
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多