Flowtype:类型化和非类型化用户的包?

Flowtype: package for both typed and untyped users?

我有一个共享的 npm 包,其中包含一些由多个 js 应用程序使用的业务逻辑。 src里面有es6+flow源码文件,然后在lib里面建了vanilla js文件,包的main设置为lib/index.js,导出了应该可见的东西

我花了几天时间使用流类型重写了包,这整理了一些代码,也有助于发现一些问题。它运行良好,类型检查,测试通过。 Babel 删除了所有流位,因此需要该包的客户端仍然可以在 js 中获得普通文件并正常工作。

但现在我想允许此包的客户端(可选)获取函数的类型签名并检查它们的调用是否正确键入。我 可以 写一个声明文件,但这看起来很愚蠢,因为这些类型已经在原始的 pre-babel 源代码中了。同时,我不能只提供那个源,因为有些客户可能没有使用 flow 或 babel。而且我不想让那些想要类型的人必须知道确切的源文件路径并且必须 require('my-package/src/the-piece-i-want')

是否有一种标准的方法来编写带有 flow 的程序包,以便 require('my-package') 既适用于普通节点用户,又适用于 babel+flow 用户的类型检查 ?如果没有,遇到此问题的其他人在做什么?

有!查看此博客 post:http://flowtype.org/blog/2015/12/01/Version-0.19.0.html#declaration-files

发布包时,只需在文件的编译版本旁边留下一份原始源代码(未编译)的副本,扩展名为 .js.flow

所以像这样:

/package.json
/src/index.js          <-- compiled version
/src/index.js.flow     <-- original version
/src/lib/myLib.js      <-- compiled
/src/lib/myLib.js.flow <-- original

当 Flow 发现 .js.flow 文件与相邻的 .js 文件同名时,它将使用前者来隐藏后者。