我是 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 可以对其执行类型检查,那就太好了。
谢谢。
最佳答案
嗯。我也在学习流程,但这似乎是一个错误。 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
关于javascript - Flow 和 Immutable.js 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41486706/