javascript - 从未标记 @flow 的导入文件中获取类型定义

标签 javascript flowtype

TL;DR 如何告诉 flow 从未使用 @flow 声明的导入模块导入类型定义?

更长的版本

流接缝能够从不使用流语法的文件中派生类型(参见示例)。

示例文件“flow.js”

if(Math.random() < 0.5) {
  var y = "hello";
} else {
  var y = 2;
}

var i = y;

命令'flow suggest flow.js'

if(Math.random() < 0.5) {
-  var y = "hello";
+  var y: number | string = "hello";
 } else {
-  var y = 2;
+  var y: number | string = 2;
 }
-var i = y;
+var i: number | string = y;

它还能够使用 flow get-importers 列出来自特定文件的所有导入。工具接缝在那里,但我无法弄清楚如何自动告诉 flow 从我的导入中获取类型定义,而不是用 @flow 声明。

我希望它沿着导入链向下遍历,计算类型并在用 @flow 标记的文件中使用它们。我不希望它没有用@flow标记的类型检查代码,只检索类型。

最佳答案

我将您的问题改写为我相信您的意思。

How do I create type definitions for files that Flow does not know about?

有两件事:

  • 如果文件归您所有(即不是 node_modules 中的第三方库等),那么您可以在旁边创建一个 *.js.flow 文件它记录了它的导出。
  • 如果文件属于您(即 node_modules 中的第三方库等),那么您可以在 flow-typed 中创建一个 libdef 文件/name-of-library.js

对于 .js.flow 文件,您可以像这样编写定义:

// @flow
declare module.exports: { ... }

对于 libdef 文件,您可以像这样编写定义:

declare module "my-third-party-library" {
  declare module.exports: { ... }
}

希望这能回答你的问题

关于javascript - 从未标记 @flow 的导入文件中获取类型定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38790621/

相关文章:

javascript - 跨浏览器 Javascript 函数作用域问题

javascript - 在 reducer 中设置值时,Prop 未按预期更新

javascript - Cucumber.js 类型错误 : Cannot read property 'pending' of undefined

javascript - 度数转换不适用于反三 Angular 函数

javascript - 条件渲染满足流程的最简洁方法

javascript - 对 React Components 的流类型感到困惑

javascript - 你能在运行时检查一个对象是否符合 Flow 类型吗?

javascript 从表单发布到部分

javascript - 流类型和合并json对象

javascript - 流类型中的组合枚举