【问题标题】:Flow type annotations and valid JavaScript source流类型注释和有效的 JavaScript 源
【发布时间】:2015-01-20 17:28:06
【问题描述】:

我正在玩 Facebook 的新流类型检查系统。

Flow, meet Underscore 中,他们似乎更改了这段 JavaScript 代码

var root = this;

进入这个

var root: any = this;

但这不再是有效的 JavaScript,对吧?我明白为什么外部接口文件会很有用,但是如何将类型注释直接添加到有效的 JavaScript 源中?

之前在 JS cmets 上使用的 Google Closure 编译器等项目。

【问题讨论】:

  • Flow 解析 JavaScript 语法的超集;最终在浏览器(或任何地方)中运行的实际代码是纯 JavaScript。

标签: javascript flowtype


【解决方案1】:

我错过了Running Flow code,其中讨论了添加构建步骤以删除类型注释。

您可以使用JSX transform tool(React 工具的一部分)来 将您的文件转换为纯 JavaScript

我还找到了flow-typestrip,这是替代方案。

我更喜欢每个模块的外部接口文件,因为您可以避免引入构建步骤。

【讨论】:

    【解决方案2】:

    从 Flow 0.4.0 开始,您可以将 Flow 语法放入 cmets。这解决了你的问题。所以你的例子看起来像:

    var root/*: any*/ = this;
    

    这会产生有效的 JavaScript 语法,并且无需转译您的代码。

    可在此处找到更多详细信息: http://flowtype.org/blog/2015/02/20/Flow-Comments.html

    【讨论】:

    • 确实没有充分的理由不将所有 Flow 注释写成 cmets。它将流类型代码从“编译为 JavaScript”的领域转换为可在任何地方使用的普通旧 JavaScript。
    【解决方案3】:

    你是对的,该代码不再是有效的 javascript。 这意味着当您在 someJavascriptFile.js 中使用 Flow 时,您必须执行一个程序,从 someJavascriptFile.js 中删除 Flow 代码,这称为转译。使用哪个编译器取决于您运行 javascript 的方式,并且可能会随着时间的推移而改变,所以我不会链接到任何一个。

    您还可以将流类型包装到注释中,例如。 var name /*:string*/ = "Hello flow."是有效的 javascript,但在我看来会使代码更难阅读。

    理论上,Javascript 引擎有朝一日可以原生支持 Flow 解析,但这还有很长的路要走。

    【讨论】:

      猜你喜欢
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      • 2017-12-21
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多