如何从 npm 发布的模块导入流注解、类型和接口

how to import flow annotations, types and interfaces from an npm-published module

我已经通过测试验证了两种模式可以用于从 npm 发布的模块导入流注释、类型和接口。

接下来我将使用以下模块名称:

模式 1

模块A

模块 B

模式 2

模块A

模块 B

以上两种模式是我发现并验证它们有效的唯一方法(尽管我找不到全面的文章)。

我的问题是:

  1. 哪种模式更惯用/更可取?
  2. 还有其他模式吗?

关于问题 #1,如果 "module-A" 由另一个组织/个人发布,我可以看到 "pattern 2" 是唯一可能的方法。否则,如果一个人发布两个模块,我认为 "pattern 1" 更直接。

您的观察完全正确。这是发布流类型定义的两种方法。没有其他办法,或者更好:官方的迁移计划有点双向,因为目前,不可能强制所有 JS 项目适应流程。

现在,"pattern 2" 描述了我们所说的 'libdef' 文件或 'declaration files'。通过 flow-typed 项目,我们尝试为常见的第三方节点模块供应高质量的 libdef 文件。

这两种模式都有其优点和缺点......供应商 *.flow.js 文件的最大问题是,它们假设了特定版本的流(例如 peerDependency flow-bin 不理解你最新使用的句法)。另一方面,它是一种使类型与实际代码库保持同步的更精简的方法。

无论如何,这两种方式都是有效的,只要确保您的消费者不会被迫更改他们的 flow 版本只是为了您的包裹。

一些其他有用的信息:

flow@0.32 引入了一项名为 flow gen-flow-files 的实验性新功能,它将通过仅复制类型信息而不是整个代码,以更有效的方式创建您的 *.flow.js

此外,我创建了一个关于流类型的问题,在这里开始了完全相同的讨论:https://github.com/flowtype/flow-typed/issues/286

干杯