使用 Flow 时,自己在文件对应需要加检查类型,这样 Flow 能正常工作,但是遇到第三方库就不行了,引用别人的代码,也不能改源码,这时候 Flow 就提出了 Library Definition 的概念
Library Definition
简称:libdef libdef 是一个特殊的文件,它告诉 Flow 关于应用程序使用的某些特定第三方模块或模块包的类型签名。
如果您熟悉具有头文件的语言(如c++),可以将 libdefs 看作类似的概念。
这些特殊文件使用与普通JS代码相同的JS扩展名,但是它们被放在项目根目录中名为 flow-typed 的目录中。这个目录中的位置告诉 Flow 将它们解释为 libdefs 文件,而不是普通的JS文件。
或者可以将指定的第三方库定义写在根目录下的 .flowconfig 文件里的 [libs] 里。
.flowconfig 使用一种与INI文件类似的自定义格式,Flow 团队打算在将来定制更好的格式:https://github.com/facebook/flow/issues/153
.flowconfig 文件一般放在根目录下(紧挨着package.json)
.flowconfig 文件有7个部分:
- [declarations]
- [include]
- [ignore]
- [untyped]
- [libs]
- [lints]
- [options]
- [version]
具体用法查看:https://flow.org/en/docs/config/
例子
比如你的项目名是 vinsea,那么:
otherdir
└── src
├── othercode.js
└── othercode2.js
vinsea
├── .flowconfig
├── build
│ ├── first.js
│ └── shim.js
├── lib
│ └── flow
├── node_modules
│ └── es6-shim
└── src
├── first.js
└── shim.js1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
在 .flowconfig 中这么设置:
[include]
../otherdir/src
[ignore]
.*/build/.*
[libs]
./lib1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
那么最终结果是:Flow将会检查 .flowconfig 路径外的一个目录 otherdir/src,忽略build目录并使用 lib 中的声明。