库定义
什么是“库定义”?
大多数真实的 JavaScript 程序依赖于第三方代码,而不仅仅是项目直接控制的代码。这意味着使用 Flow 的项目可能需要引用没有类型信息或没有准确和/或精确类型信息的外部代码。为了处理这种情况,Flow 支持“库定义”(也称为“libdef”)的概念。
libdef 是一个特殊文件,它向 Flow 提供有关应用程序使用的某些特定第三方模块或模块包的类型签名的信息。如果您熟悉具有头文件的语言(如 C++
),您可以将 libdef 视为类似的概念。
这些特殊文件使用与普通 JS 代码相同的 .js
扩展名,但它们放置在项目根目录中的名为 flow-typed
的目录中。放置在这个目录中告诉 Flow 将它们解释为 libdef 而不是普通 JS 文件。
注意:使用
/flow-typed
目录来存放 libdef 是一种约定,它使 Flow 能够开箱即用,并鼓励使用 Flow 的项目之间保持一致性,但也可以使用.flowconfig
文件的[libs]
部分 显式配置 Flow 以在其他地方查找 libdef。
您还可以了解有关 声明文件 的信息。
一般最佳实践
尝试为项目使用的每个第三方库提供 libdef。
如果项目使用没有类型信息的第三方库,Flow 将像对待任何其他无类型依赖项一样对待它,并将所有导出标记为 any
。
由于这种行为,最佳实践是尽可能为使用的第三方库找到或编写 libdef。我们建议查看 flow-typed
工具和仓库,它可以帮助您快速找到和安装第三方依赖项的预先存在的 libdef。