.flowconfig [declarations]
通常,第三方库的类型定义存在问题,或者仅与特定版本的 Flow 兼容。 在这些情况下,可能需要使用第三方库的类型信息,而无需对其内容进行类型检查。
.flowconfig
文件中的 [declarations]
部分告诉 Flow 以声明模式解析与指定正则表达式匹配的文件。 在声明模式下,代码不会进行类型检查。 但是,函数、类等的签名会被提取出来,并在检查其他代码时由类型检查器使用。
从概念上讲,可以将声明模式视为 Flow 仍然对文件进行类型检查,但行为就像在每一行上都有一个 $FlowFixMe
注释一样。
另请参阅 [untyped]
,了解如何不检查文件类型,而是对所有内容使用 any
。
需要牢记的事项
- 声明模式仅应用于现有的第三方代码。 您永远不应该将此用于您控制的代码。
- 这些是 OCaml 正则表达式。
- 这些正则表达式与绝对路径匹配。 它们可能应该以
.*
开头
一个示例 [declarations]
部分可能如下所示
[declarations]
.*/third_party/.*
.*/src/\(foo\|bar\)/.*
.*\.decl\.js
此 [declarations]
部分将以声明模式解析
- 名为
third_party
的目录下的任何文件或目录 .*/src/foo
或.*/src/bar
下的任何文件或目录- 任何以扩展名
.decl.js
结尾的文件
您可以在正则表达式中使用 <PROJECT_ROOT>
占位符。 在运行时,Flow 会将占位符视为项目根目录的绝对路径。 这对于编写相对而不是绝对的正则表达式很有用。
例如,您可以编写
[declarations]
<PROJECT_ROOT>/third_party/.*
这将以声明模式解析项目根目录中名为 third_party/
的目录下的任何文件或目录。 但是,与前面的示例中的 .*/third_party/.*
不同,它不会解析名为 third_party/
的目录下的文件或目录,例如 src/third_party/
。