跳至主要内容

宣布 Flow 注释

从 Flow 0.4.0 开始,您可以将 Flow 特定的语法放在特殊的注释中。如果您使用这些特殊的注释,则无需在运行代码之前转换 Flow 特定的语法。虽然我们强烈建议您在没有特殊注释的情况下编写代码,但此功能将帮助那些无法在其设置中添加 Flow 剥离转换的人。这是我们 最受欢迎的功能之一,希望它能使更多人使用 Flow!

此功能引入了 3 个特殊的注释:/*:/*::/*flow-include。Flow 将读取这些特殊注释内的代码,并将代码视为特殊注释标记不存在。这些特殊注释是有效的 JavaScript 块注释,因此您的 JavaScript 引擎将忽略注释内的代码。

Flow 注释语法

Flow 目前支持 3 个特殊的注释。您可能从 Jarno Rantanen 的优秀项目 flotate 中认识到这种语法。

1. /*:

/*: <your code> */ 被 Flow 解释为 : <your code>

function foo(x/*: number*/)/* : string */ { ... }

被 Flow 解释为

function foo(x: number): string { ... }

但对 JavaScript 引擎(忽略注释)来说,它看起来像

function foo(x) { ... }

2. /*::

/*:: <your code> */ 被 Flow 解释为 <your code>

/*:: type foo = number; */

被 Flow 解释为

type foo = number;

但对运行时(忽略注释)来说,它看起来像


3. /*flow-include

/*flow-include <your code> */ 被 Flow 解释为 <your code>。它的行为与 /*:: 相同。

/*flow-include type foo = number; */

被 Flow 解释为

type foo = number;

但对运行时(忽略注释)来说,它看起来像


注意:/* 之后但 :::flow-include 之前的空格会被忽略。因此您可以编写类似以下内容:

/* : number */
/* :: type foo = number */
/* flow-include type foo = number */

未来工作

我们计划更新 Flow 转换,以便用这些特殊注释包装 Flow 语法,而不是完全剥离它。这将帮助人们编写 Flow 代码,但发布的代码可以在有或没有 Flow 的情况下运行。

感谢

特别感谢 Jarno Rantanen 创建了 flotate 并支持我们将他的语法合并到 Flow 中。