プロジェクトで enum を有効にする
ツールをアップグレードする
リポジトリで Flow Enum を有効にするには、まず次のパッケージを更新する必要があります。
- 少なくとも Flow 0.159 にアップグレードする
- Flow が enum を有効にするには、いくつかの設定が必要です。以下を参照してください。
- 少なくともバージョン 2.2 に Prettier をアップグレードする
- このバージョン以降、Prettier は Flow Enum の解析と整形をすぐに処理できます。
- Flow Enum をフォーマットするには、JavaScript ファイルで
flow
パーサーオプションを使用する必要があります。
- 少なくともバージョン 7.13.0 に Babel をアップグレードする
- このバージョン以降、Babel は Flow Enum を解析できます。ただし、この解析を有効にするには、いくつかの設定を提供する必要があり、さらに必要な変換は含まれていません。以下を参照してください。
- 少なくともバージョン 0.11.0 に jscodeshift をアップグレードする
- 少なくともバージョン 0.4.8 に hermes-parser をアップグレードする
- ESLint の場合は、次のいずれかを使用します
- 少なくともバージョン 0.4.8 で hermes-eslint を ESLint パーサーとして使用する
- または、バージョン 10.1.0 に babel-eslint をアップグレードする
- このバージョン以降、
babel-eslint
は Flow Enum をすぐに処理できます。 - 11.x にアップグレードしないでください。このブランチは Flow Enum をサポートしていません。
- このバージョン以降、
- または、Babel 7.13.0 以降を使用する別のソリューションを、Flow を有効にして使用することもできます。これも機能する可能性があります。
コードを検査する他のツールがある場合は、それも更新する必要があります。flow-parser、hermes-parser、または @babel/parser
を使用している場合は、上記の手順に従ってそれらをアップグレードします。他のパーサーを使用している場合は、そのパーサーに Flow Enum の解析を実装する必要があります。Babel、Flow、および Hermes パーサーの既存のコードを参照して、作業の参考にすることができます。
enum を有効にする
.flowconfig
の[options]
ヘッダーの下にenums=true
を追加します- Flow Enum の Babel 変換を追加します。これにより、enum 宣言 AST ノードがランタイムへの呼び出しに変換されます:babel-plugin-transform-flow-enums。開発依存関係に追加し、Babel 設定を調整して変換を使用します。デフォルトでは、変換はランタイムパッケージを直接(下記)必要としますが、これを設定できます。
- Flow Enum ランタイムパッケージを本番環境の依存関係に追加します。これは Flow Enum を作成するために、実行時に必要になり使用されます:flow-enums-runtime
推奨される ESLint ルールを有効にする
enum は switch
ステートメントで網羅的にチェックできるため、以前よりも switch
ステートメントの使用が増加する可能性があります。switch
ステートメントの一般的な問題を回避するために、これらの ESLint ルールを有効にする(少なくとも警告として)ことをお勧めします。
- no-fallthrough:これにより、一般的なユースケースをサポートしながら、ユーザーが switch case の最後に誤って
break
ステートメントを忘れることを防ぎます。 - no-case-declarations:これにより、新しいブロックでそのケースをラップせずに、switch case に字句スコープ宣言(
let
、const
)が導入されるのを防ぎます。そうしないと、異なるケースの宣言が競合する可能性があります。
また、eslint-plugin-fb-flow の一部として、Flow Enum に固有のルールがいくつかあります。
- use-flow-enums:enum のような
Object.freeze
およびkeyMirror
の使用を、代わりに Flow Enum に変換することを提案します。 - flow-enums-default-if-possible:メンバー名と同一の指定された値を持つ文字列 enum を、デフォルトの enum に自動修正します。
- no-flow-enums-object-mapping:オブジェクトリテラルの代わりに、enum 値を他の値にマッピングするために、switch を持つ関数を使用することを提案します。