如何使用Flow类型检查从fromJS
生成的Immutable.JS数据结构的形状?普通的老JS斑点可以非常精确地使用对象的文字符号中键入:流:使用fromJS()类型化复杂的不可变形状?
type ObjectShape = {
a: number,
b: string,
c: {
d: number,
},
e: Array<number>
};
const obj: ObjectShape = { // hyper-accurate
a: 1,
b: '2',
c: {
d: 3,
},
e: [4]
}
然而,在Immutable.js方面,似乎有两个主要的并发症:
看来,永恒.js文件的
fromJS
方法返回any
(https://github.com/facebook/immutable-js/blob/master/type-definitions/immutable.js.flow#L764),所以下面没有被捕获如流程的错误:const map: boolean = fromJS(obj) // this is totally not true, but Flow can't tell
看来,地图形状不能用每个How to describe Immutable.js Map shape with Flow(或者这个信息是过时的?)的类似对象的符号来描述。
我真的很困惑如何让Flow理解Immutable.js,特别是地图。从我所知道的情况来看,当数据位于Immutable.js结构中而不是普通的JS基元时,Flow会失去很多关于代码库的情报。
https://github.com/flowtype/flow-typed,你可以加载地图类型定义 –
流式类型没有immutabe.js的定义,它们直接包含在immutable.js中来自npm的包。然而,immutable.js中包含的Map定义现在看起来并不允许您定义形状:https://github.com/facebook/immutable-js/blob/master/type-definitions/immutable.js.flow# L489 –