从 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 中。