【问题标题】:Flow typing a global module流式输入全局模块
【发布时间】:2018-04-17 22:39:04
【问题描述】:

我正在全局导入一个 npm 模块,使用 webpack 的 provide plugin 并从 flow-typed 下载它的库 def。我想指出这个库定义来适当地键入我的全局变量。我在我的应用程序的/flow-typed 中添加了一个app.js.flow 文件:

import type _R from 'ramda';

declare var R: _R;

...other lib defs

但似乎在我的整个应用程序中,R 仍然没有类型,因为流程告诉我所有对 R.foo 的调用都没有经过类型检查。我的其他手动库定义工作正常。这似乎表明我没有正确输入R。有谁知道这样做的正确方法吗?

【问题讨论】:

  • 你可能想要import typeof * as _R from 'ramda';吗?
  • @loganfsmyth 刚试过,好像不行
  • 同样的错误,还是不同的?
  • 完全没有错误。 Flow 告诉我所有对 R.whatever 的调用都未被发现并被视为any
  • 有趣的是,当我将其更改为 declare var R: boolean; 时,我仍然得到相同的结果,并且没有任何错误。

标签: javascript flowtype flow-typed


【解决方案1】:

您只需要安装流类型并运行flow-typed install,它就会下载定义(如果存在)和通用存根(generic stub)。在 flowconfig 中,你不需要任何特殊的东西,它会寻找流类型作为库的一部分

【讨论】:

  • 是正确的,但这仅涵盖作为模块导入的包,因为流程使用import package from 'packageName' 将 lib def 与变量相关联。但是这里我是在全局导入一个包,所以没有办法告诉 flow 将全局指向那个特定的 lib def。
  • "这些特殊文件使用与普通 JS 代码相同的 .js 扩展名,但它们被放置在项目根目录下名为 flow-typed 的目录中。放置在此目录中告诉 Flow 解释它们作为 libdefs 而不是普通的 JS 文件。” - flow.org/en/docs/libdefs - 这表明使用 .flow 作为扩展名是不正确的。我不知道这是否能解决全球问题。另见github.com/facebook/flow/issues/4280
猜你喜欢
  • 1970-01-01
  • 2020-07-21
  • 2020-04-01
  • 1970-01-01
  • 2018-11-21
  • 2020-06-27
  • 2016-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多