跳至主要内容

.flowconfig [declarations]

通常,第三方库的类型定义存在问题,或者仅与特定版本的 Flow 兼容。 在这些情况下,可能需要使用第三方库的类型信息,而无需对其内容进行类型检查。

.flowconfig 文件中的 [declarations] 部分告诉 Flow 以声明模式解析与指定正则表达式匹配的文件。 在声明模式下,代码不会进行类型检查。 但是,函数、类等的签名会被提取出来,并在检查其他代码时由类型检查器使用。

从概念上讲,可以将声明模式视为 Flow 仍然对文件进行类型检查,但行为就像在每一行上都有一个 $FlowFixMe 注释一样。

另请参阅 [untyped],了解如何不检查文件类型,而是对所有内容使用 any

需要牢记的事项

  1. 声明模式仅应用于现有的第三方代码。 您永远不应该将此用于您控制的代码。
  2. 这些是 OCaml 正则表达式
  3. 这些正则表达式与绝对路径匹配。 它们可能应该以 .* 开头

一个示例 [declarations] 部分可能如下所示

[declarations]
.*/third_party/.*
.*/src/\(foo\|bar\)/.*
.*\.decl\.js

[declarations] 部分将以声明模式解析

  1. 名为 third_party 的目录下的任何文件或目录
  2. .*/src/foo.*/src/bar 下的任何文件或目录
  3. 任何以扩展名 .decl.js 结尾的文件

您可以在正则表达式中使用 <PROJECT_ROOT> 占位符。 在运行时,Flow 会将占位符视为项目根目录的绝对路径。 这对于编写相对而不是绝对的正则表达式很有用。

例如,您可以编写

[declarations]
<PROJECT_ROOT>/third_party/.*

这将以声明模式解析项目根目录中名为 third_party/ 的目录下的任何文件或目录。 但是,与前面的示例中的 .*/third_party/.* 不同,它不会解析名为 third_party/ 的目录下的文件或目录,例如 src/third_party/