Flow の Union Type をキャストする

Flow の suppress_comment を使って、 Union Type の強制キャストっぽいことをしてみます。
Redux の Reducer を定義する時にを例にとっています。
action から payload の値を抽出するのに3行を費やしてしまいますが、 Prettier などで破壊されないのでいい感じ。


💩 .flowconfig
[options]
suppress_comment= \\(.\\|\n\\)*\\$FlowFixMe

// reducer.js
type Action =
  SubAction1 |
  SubAction2 |
  SubAction3

const reducer = (state: State, action: Action): State => {
  const { type } = action
  switch (type) {
     case: SUB_ACTION1:
       const { payload } = // SubAction1 として型チェックされて嬉しい
         // $FlowFixMe
         (action: SubAction1) // ここのキャストにはエラーが含まれるが suppress_comment により無視される
       return update1(state, payload)
     
     case: SUB_ACTION2:
       const { payload } =
         // $FlowFixMe
         (action: SubAction2)
       return update2(state, payload)

     case: SUB_ACTION3:
       const { payload } =
         // $FlowFixMe
         (action: SubAction3)
       return update3(state, payload)

     default:
       return state
  }
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です