【问题标题】:What is the "types first" Flow architecture?什么是“类型优先”的流架构?
【发布时间】:2020-07-19 13:48:02
【问题描述】:

Flow 团队的blog post 描述了 Flow 的“重新架构”,称为“类型优先”。据我所知,唯一的描述是在这篇博文的引用中:

“...它利用文件边界处的完整类型注释来执行更好(更可并行化和更少冗余)的单独编译。”

在任何地方都有关于此的更多详细信息吗?具体来说,我想知道这些完整的注释是什么:源代码和声明文件的新限制是什么?

例如,这是否允许?

import { func } from "./other-module";
export const myNumber = func(num1, num2);

这在 TypeScript 中是有问题的,因为如果不知道 func 的类型,就无法解析 myNumber 的类型。 Flow 的“类型优先”重新架构是否需要用户编写:

import { func } from "./other-module";
export const myNumber: number = func(num1, num2);

这只是我的一个具体问题。我正在寻找更多信息和一个文档链接,该文档解释了重新架构的所有已知影响。

【问题讨论】:

标签: javascript flowtype


【解决方案1】:

这听起来真的很华而不实,也许它在引擎盖下。但实际上这很简单。在您的代码 sn-p 中,您是绝对正确的,几乎就是这样。

在导出之前必须有明确定义的类型

虽然不一定在您导出之前。以下也有效。

const TestComponent = (): React.Node => {};

export default TestComponent;

它增加了一点开销,但好处是:

  • 性能改进,因为 Flow 无需扫描所有依赖项即可为您提供健全性检查
  • 更可靠的代码,因为流在​​模块边界内运行,因此您不会遇到由深度嵌套的依赖关系引起的流错误。

他们还发布了一篇新的博客文章,该文章进一步探讨了这一点,因为类型首先已经正式发布。 https://medium.com/flow-type/types-first-a-scalable-new-architecture-for-flow-3d8c7ba1d4eb

更新类型优先架构现在是documented

【讨论】:

  • 我可以用flow.org/en/docs/lang/types-first 的链接更新您的答案吗? Aleksey L. 在上面的评论中链接到它
  • 一定要去!
  • @MaxHeiber 对不起,如果这个问题看起来很愚蠢,但是流程本身或您的应用程序代码中的性能改进了吗?我已经开始阅读流程文档,到目前为止我还不清楚。 (我猜是流的性能改进)
  • 性能是流分析您的代码并为您提供错误的速度。 Flow 对应用程序性能的影响为零,因为它不是可运行的代码。在节点或浏览器上运行之前,必须剥离所有流代码,因为它不是“真正的”JS
  • @Brianzchen 感谢您的澄清,非常感谢。我理解引入更新的原因。 (恕我直言)此更新似乎确实引入了很多额外的开销(更新您的代码库),尤其是在您从事大型项目时。再次感谢你的回复。 :)
猜你喜欢
  • 2018-02-17
  • 1970-01-01
  • 2012-04-01
  • 2012-04-15
  • 2010-12-26
  • 2011-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多