使用 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使用教程记录

Immutable.js 与 Angular 2

Immutable.js - fromJS 生成 Record 代替 Map

在 Immutable.js 中使用 React 的不可变助手

“首次加载 JS”大小问题 Next.js。 (使用 immutable.js)