使用 immutable.js 和 Facebook 流进行静态类型检查
Posted
技术标签:
【中文标题】使用 immutable.js 和 Facebook 流进行静态类型检查【英文标题】:Static type checking with immutable.js and Facebook flow 【发布时间】:2015-02-08 03:52:51 【问题描述】:我一直在为我的 react 应用程序使用 Immutable.js,我很喜欢它。 Facebook 还发布了Flow。 Flow 可以让我做一些很酷的事情,比如 prop 类型的编译时验证。问题是我的道具通常是不可变的对象。 Immutable.js 和 Flow 一起使用有什么好的方法吗?
给定一个 Immutable.js 对象参数,我可以使用 Flow 以某种方式指定它应该包装的对象的类型吗?在那个对象中,我可能有字符串、数字、布尔值,更重要的是还有其他 Immutable.js 对象。
【问题讨论】:
也许您可以使用访问器来静态注释 Immutable.js 的动态部分。 您的意思是用提供注释访问器的自定义对象包装不可变对象吗? @brandon-tiley 我犹豫是否要使用 flowtype 标签,因为有一个与排版完全不相关的项目,名为 FlowType.JS。 @KilamanjaroKablam 运气好吗? 了解更多关于 JS 类型的信息。您可以使用npmjs.com/package/react-immutable-proptypes 检查道具类型。它对我有用。 【参考方案1】:编辑添加flowtypes have been added since most recent major version。
原答案:
Flow 和 Immutable.js 之间的集成似乎是 in development,但尚未完成。
【讨论】:
【参考方案2】:在撰写本文时,您可以通过从此处获取接口文件来将两者一起使用:
https://github.com/facebook/immutable-js/blob/master/type-definitions/immutable.js.flow
-
在您的项目中创建一个目录,例如
interfaces
。
如果.flowconfig
不存在,则创建它,并添加以下行
.flowconfig
[libs]
interfaces/
这将在 ./interfaces/
目录中查找流定义。
虽然在 SO 上不赞成链接到资源,但这种情况是有道理的,因为这将是最新的(我假设 FB 在更新核心库时会保持更新)
【讨论】:
能否提供一个使用中的示例。这个不可变版本的类型是什么样的?type someObject = fieldOne: string, fieldTwo: number;
不确定为什么投反对票?这几乎与@Geoffrey Abdallah 的答案相同,但在他之前得到了回答?
感谢您的大力帮助。以上是关于使用 immutable.js 和 Facebook 流进行静态类型检查的主要内容,如果未能解决你的问题,请参考以下文章
使用 immutable.js 的 react shouldComponentUpdate 的最佳实现是啥
Immutable.js - fromJS 生成 Record 代替 Map