传递给 Redux reducer 时为 Immutable.js Map 键入注解

Type annotation for Immutable.js Map when passing to Redux reducer

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

有问题的应用程序使用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) {

您可以这样描述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'});