【问题标题】:Flowtype: package for both typed and untyped users?Flowtype:有类型和无类型用户的包?
【发布时间】:2016-07-26 23:12:08
【问题描述】:

我有一个共享的 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 用户的类型检查都有效?如果没有,其他有此问题的人在做什么?

【问题讨论】:

    标签: javascript node.js babeljs flowtype


    【解决方案1】:

    有!查看这篇博文: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 文件同名的 .js.flow 文件时,它将使用前者来隐藏后者。

    【讨论】:

      猜你喜欢
      • 2019-04-13
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多