跳至主要内容

Flow 很高兴地宣布组件语法,为 Flow 语言添加了对 React 原语(如组件和钩子)的一流支持。这些特性为许多 React 规则带来了更好的可用性、表达性和静态强制。

条件类型允许您通过检查输入类型在两种不同的输出类型之间进行选择。

从 v0.201.0 开始,Flow 现在可以针对未使用的/浮动 Promise 进行 lint。未使用的 Promise 可能很危险,因为错误可能无法处理,并且代码可能不会按预期顺序执行。它们通常是 Flow 可以完美地提醒您的错误。

从 Flow 版本 0.201 开始,使用 Partial<ObjType> 使对象类型的字段全部可选(使用它代替不安全的 $Shape),并使用 Required<ObjType> 使对象类型的可选字段变为必需。

本地类型推断通过适度增加 Flow 的注释要求,使 Flow 的推断行为更可靠、更可预测,使其更接近行业标准,并利用越来越强和明确类型的代码库。

Flow 以一种宽松但不安全的方式处理空对象字面量 {}。本文中描述的修复措施提高了安全性与可预测性,但需要使用不同的模式和行为。

Flow 正在发布一项新的语言规则,该规则确定未注释变量在其初始化时的类型。除了这些新规则外,还修复了一些导致细化无效的健全性错误。

我们正在用一个行为更可预测且可以在本地推理的系统替换 Flow 的当前推断引擎。

Flow 枚举是一个可选功能,它允许您定义一组固定的常量,这些常量创建自己的类型。

Flow 的索引访问类型是一种新的类型注释语法,它允许您从对象、数组或元组类型中获取属性的类型。

Flow 通过禁止以前允许的不安全行为并澄清错误消息,改进了对泛型类型的处理。

Flow Types-First 模式已发布!它通过利用完全类型的模块边界来释放 Flow 的大规模潜力。在我们的最新博客文章中了解更多信息。

对对象展开的修复将暴露您代码库中的错误。详细了解常见错误以及如何修复它们。

从 0.84.0 升级遇到问题?阅读有关 Flow 团队如何在 Facebook 升级 Flow 的内容!

我们对 React 模型进行了一些重大更改,以更好地模拟新的 React 组件。让我们谈谈 React.AbstractComponent!

从 0.85.0 开始,Flow 将要求更多注释。在我们的最新博客文章中了解如何处理这些错误。

在过去的一年里,Flow 团队一直在慢慢审核和改进类型检查器生成的所有可能的错误消息。在 Flow 0.66 中,我们很高兴地宣布一种新的错误消息格式,旨在缩短您阅读和修复 Flow 发现的每个错误所需的时间。

Flow 对 React 的第一个版本是对 React.createClass() 的神奇实现。从那时起,React 已经发生了重大变化。现在是重新思考 Flow 如何模拟 React 的时候了。

Flow 的类型信息不仅对证明您的程序是正确的有用。介绍 Flow linter。

您是否曾经希望能够将实现细节隐藏在用户之外?了解不透明类型别名如何完成这项工作!

严格检查函数调用元数

Flow 的最初目标之一是能够理解惯用的 JavaScript。在 JavaScript 中,您可以使用比函数期望的更多参数来调用函数。因此,Flow 从未抱怨使用多余的参数调用函数。

我们正在改变这种行为。

介绍 Flow-Typed

拥有高质量且由社区驱动的库定义(“libdefs”)对于获得 Flow 的出色体验至关重要。今天,我们正在介绍 **flow-typed**:一个 存储库 和一个 CLI 工具,它们代表了构建、共享和分发 Flow libdefs 的新工作流程的第一部分。

该项目的目的是发展一个 libdefs 生态系统,让 Flow 的类型推断大放异彩,并与 Flow 的使命保持一致:从现实世界的 JavaScript 中提取精确且准确的类型。我们从类似的努力(如 TypeScript 的 DefinitelyTyped)中学到了很多东西,我们希望将我们学到的一些经验教训带到 Flow 生态系统中。

以下是该项目的一些目标

属性方差和其他即将发生的更改

Flow 的下一个版本 0.34 将包含对对象类型的一些重要更改

  • 属性方差,
  • 默认情况下为不变的字典类型,
  • 默认情况下为协变的方法类型,
  • 以及更灵活的 getter 和 setter。

Windows 支持已发布!

我们很高兴地宣布 Flow 现在正式在 64 位 Windows 上可用!从 Flow v0.30.0 开始,我们将在每个版本中发布一个 Windows 二进制文件。您可以直接从 GitHub 版本页面 下载 Windows 二进制文件(以 .zip 文件形式),也可以使用 flow-bin npm 包 安装它。试一试,并 报告您遇到的任何问题

![Windows 支持 GIF]({{ site.baseurl }}/static/windows.gif)

让 Flow 在 Windows 上运行并不容易,这得益于 GrégoireÇagdasFabrice(来自 OCamlPro)的辛勤工作。

联合和交集的新实现

摘要

在 Flow 0.28 之前,联合/交集类型的实现存在严重错误,并且[the][gh1759] [root][gh1664] [cause][gh1663] [of][gh1462] [a][gh1455] [lot][gh1371] [of][gh1349] [weird][gh842] [behaviors][gh815]你可能在过去使用 Flow 时遇到过这些错误。这些错误现在已在[a diff landing in 0.28][fotu].

版本 0.21.0

昨天我们发布了 Flow v0.21.0!与往常一样,我们在 变更日志 中列出了最有趣的更改。但是,由于我在飞机上,无法入睡,我想深入研究几个更改可能很有趣!希望这篇博文能变得有趣且易读!

JSX 内在元素

如果你正在编写 JSX,它可能混合了你自己的 React 组件和一些内在元素。例如,你可能会写

render() {
return <div><FluffyBunny name="Fifi" /></div>;
}

在这个例子中,FluffyBunny 是你编写的 React 组件,而 div 是一个 JSX 内在元素。React 和 Flow 假设小写 JSX 元素是内在元素。在 Flow v0.21.0 之前,Flow 忽略了内在元素并赋予它们 any 类型。这意味着 Flow 允许你在 JSX 内在元素上设置任何属性。Flow v0.21.0 默认情况下会与 v0.20.0 做同样的事情,但是现在你也可以配置 Flow 来正确地为你的 JSX 内在元素类型化!

版本 0.19.0

今天发布了 Flow v0.19.0!它有大量的更改,变更日志 对其进行了总结。但是,变更日志可能有点简明,所以这里对一些更改进行了更长的解释。希望这有帮助!

@noflow

Flow 默认情况下是选择加入的(你将 @flow 添加到文件中)。但是我们注意到,有时人们会将 Flow 注释添加到缺少 @flow 的文件中。通常,这些人没有注意到 Flow 正在忽略该文件。因此,我们决定停止在非 Flow 文件中允许 Flow 语法。这可以通过向你的文件添加 @flow@noflow 来轻松解决。前者将使该文件成为 Flow 文件。后者将告诉 Flow 完全忽略该文件。

声明文件

.flow 结尾的文件现在被特殊对待。它们是模块的首选提供者。也就是说,如果 foo.jsfoo.js.flow 都存在,那么当你写 import Foo from './foo' 时,Flow 将使用从 foo.js.flow 而不是 foo.js 导出的类型。

我们设想人们将使用 .flow 文件的两种主要方式。

使用 Flow 类型化生成器

Flow 0.14.0 包含对生成器函数的支持。生成器函数为 JavaScript 程序提供了独特的能力:暂停和恢复执行的能力。这种控制方式为 async/await 铺平了道路,async/await 是一个 即将推出的功能,Flow 已经支持它。

版本 0.17.0

今天我们发布了 Flow v0.17.0!你可能注意到的第一件事是我们更改了在命令行显示错误的方式。新的错误看起来像这样

![新的错误格式]({{ site.baseurl }}/static/new_error_format_v0_17_0.png)

这应该有助于我们的命令行用户理解许多错误,而无需参考他们的源代码。我们将继续迭代这种格式,所以告诉我们你喜欢什么和不喜欢什么!感谢 @frantic 构建此功能!

此版本中还有很多其他功能和修复!前往我们的 发布 查看完整列表!

版本 0.16.0

上周五我们发布了 Flow v0.16.0!我们有一些主要的性能改进,我们希望将其发布,此外 let/const 支持也已准备就绪(再次感谢 @samwgoldman)!

与往常一样,变更日志 最适合总结重大更改。

版本 0.15.0

今天我们发布了 Flow v0.15.0!在过去的一个月里发生了很多变化,我们很高兴将所有贡献者的辛勤工作呈现在大家面前!衷心感谢所有为此次发布做出贡献的人!

查看 变更日志 以了解新功能。