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

Lin*_*der 8 javascript flowtype

TL; DR如何flow从未声明的导入模块中导入类型定义@flow

更长的版本

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

示例文件'flow.js'

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

var i = y;
Run Code Online (Sandbox Code Playgroud)

命令'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;
Run Code Online (Sandbox Code Playgroud)

它也可以用来列出特定文件中的所有导入flow get-importers.工具接缝在那里,但我无法弄清楚如何自动告诉flow从我的未声明的导入中获取类型定义@flow.

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

Jam*_*yle 2

我将你的问题改写为我认为你的意思。

如何为 Flow 不知道的文件创建类型定义?

有两件事:

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

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

// @flow
declare module.exports: { ... }
Run Code Online (Sandbox Code Playgroud)

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

declare module "my-third-party-library" {
  declare module.exports: { ... }
}
Run Code Online (Sandbox Code Playgroud)

希望这能回答你的问题