如何让Flow在未添加@flow指令的文件中实现精准类型推断?
解决Flow无@flow指令时的精准类型推断问题
你碰到的这个情况很典型——Flow默认只会对标注了//@flow(或者// @flow strict这类)的文件启用完整的类型检查,没加指令的文件会进入“弱模式”,很多类型会被宽松地推断成any,就像你看到的g1的类型那样。
在不能修改目标文件的前提下,有两个靠谱的方法让Flow按严格模式处理它,得到精准的类型推断,适配你用dump-types的场景:
方法1:给dump-types命令加参数强制检查
直接在运行dump-types的时候加上--strict参数,指定目标文件:
flow dump-types --strict path/to/your-file.js
这个参数会强制Flow对该文件启用完整的类型检查规则,不管文件里有没有//@flow指令,这样输出的g1类型就会是正确的Geolocation,而不是any。
如果需要一次性检查所有未标注//@flow的文件,也可以用:
flow dump-types --all --strict
方法2:修改.flowconfig配置实现持久化
如果不想每次都手动加参数,可以在项目根目录的.flowconfig里做配置,让Flow自动对指定文件启用严格检查:
- 打开
.flowconfig,找到(或者新增)[include]区块,把你的目标文件路径加进去:[include] path/to/your-file.js - 然后在
[options]区块里开启严格模式:[options] strict=true
配置完成后,每次运行flow dump-types或者flow check,Flow都会自动按严格模式处理你指定的文件,不用修改文件本身。
如果不想启用全部严格规则,只是需要精准的类型推断,也可以在[options]里单独设置infer=true,不过strict=true已经包含了完整的类型推断能力,更能覆盖你的需求。
内容的提问来源于stack exchange,提问作者Lou
相关产品推荐
相关产品推荐

