Flow和Immutable.js Map

时间:2017-01-05 13:46:00

标签: javascript immutable.js flowtype

我是Flow的新手,我正在试图弄清楚如何使用Immutable JS的Map。

我有以下代码: -

// @flow

import { Map } from 'immutable';

let myMap: Map<string, number> = new Map({ a: 'a' });

myMap = myMap.merge({ a: 'a' });

当我运行Flow时,我收到以下错误,这是预期的: -

src/js/a.js:7
  7: myMap = myMap.merge({ a: 'a' });
                              ^^^ string. This type is incompatible with
  5: let myMap: Map<string, number> = Map({ a: 'a' });
                            ^^^^^^ number

我的问题是为什么new Map({ a: 'a' });没有标记为错误?

是否可以将其作为错误?在我正在尝试应用Flow的现有项目中,我们有很多类似的用法,如果Flow可以强制执行类型检查,那将会很好。

谢谢。

1 个答案:

答案 0 :(得分:0)

嗯。我也在学习流程,但这似乎是个错误。 Immutable的Map类的流声明如下所示:

declare class Map<K,V> extends KeyedCollection<K,V> {
  static <K, V>(): Map<K, V>;
  static <V>(obj?: {[key: string]: V}): Map<string, V>;
  ...

有趣的是,

const mapIngredients: { [string]: number } = { a: 'a' }

会在'a'上触发流错误。当流量检查Map的参数时,似乎出现了问题。实际上,甚至Map(123)类型检查:/

流程版本:0.37.4