跳至主要内容

在项目中启用枚举

升级工具

要在你仓库中启用 Flow 枚举,你必须先更新以下包

  • 升级到至少 Flow 0.159
    • Flow 需要设置一些配置才能启用枚举 - 请参见下文。
  • 升级 Prettier 到至少版本 2.2
    • 从该版本开始,Prettier 可以开箱即用地处理解析和美化 Flow 枚举。
    • 你必须使用 flow 解析器选项 才能格式化 JavaScript 文件中的 Flow 枚举。
  • 升级 Babel 到至少版本 7.13.0
    • 从该版本开始,Babel 可以解析 Flow 枚举。但是,要启用此解析,需要提供一些配置,此外它不包含所需的转换 - 请参见下文。
  • 升级 jscodeshift 到至少版本 0.11.0
  • 升级 hermes-parser 到至少版本 0.4.8
  • 对于 ESLint,可以:
    • 使用 hermes-eslint 作为你的 ESLint 解析器,至少版本 0.4.8
    • 或者升级 babel-eslint 到版本 10.1.0
      • 从该版本开始,babel-eslint 可以开箱即用地处理 Flow 枚举。
      • 不要升级到 11.x,该分支不支持 Flow 枚举。
    • 或者使用其他解决方案,使用 Babel 7.13.0 或更高版本,启用 Flow - 这也可能有效

如果你有任何其他检查代码的工具,你也需要更新它。如果它使用 flow-parserhermes-parser@babel/parser,请根据上面的说明进行升级。如果它使用其他解析器,你需要在该解析器中实现解析 Flow 枚举的功能。你可以参考 Babel、Flow 和 Hermes 解析器中的现有代码来指导你的工作。

启用枚举

  • 在你的 .flowconfig 中,在 [options] 标题下,添加 enums=true
  • 添加 Flow 枚举 Babel 转换。它将枚举声明 AST 节点转换为对运行时的调用:babel-plugin-transform-flow-enums。将其添加到你的开发依赖项中,并调整你的 Babel 配置以使用该转换。该转换默认情况下需要直接使用运行时包(如下所示),但你可以对其进行配置。
  • 将 Flow 枚举运行时包添加到你的生产依赖项中。这将在运行时需要并使用,以创建 Flow 枚举:flow-enums-runtime

启用建议的 ESLint 规则

枚举可以在 switch 语句中进行穷举检查,因此与之前相比,可能会增加 switch 语句的使用。为了防止 switch 语句中出现常见问题,我们建议你启用这些 ESLint 规则(至少作为警告)

  • no-fallthrough: 这可以防止用户在 switch case 的末尾意外忘记 break 语句,同时支持常见用例。
  • no-case-declarations: 这可以防止在 switch case 中引入词法作用域声明 (letconst),而无需将该 case 包裹在一个新的块中。否则,不同 case 中的声明可能会冲突。

我们还有一些 Flow 枚举特定的规则,作为 eslint-plugin-fb-flow 的一部分

  • use-flow-enums: 建议将类似枚举的 Object.freezekeyMirror 使用方式改为 Flow 枚举。
  • flow-enums-default-if-possible: 自动修复具有与成员名称相同的指定值的字符串枚举,使其成为默认枚举。
  • no-flow-enums-object-mapping: 建议使用带有 switch 的函数来将枚举值映射到其他值,而不是使用对象字面量。