2

これを行う決定的な答えを見つけようとしましたが、まだ見つけていません。

switch網羅的なステートメントを実装する方法に答える SO に関する質問があります。

TypeScriptでスイッチブロックが網羅的であることを確認するにはどうすればよいですか?

答えは次のとおりです。

パラメーターとして取りnever、戻りnever、何かで呼び出されたときにスローする関数を作成します。

function assertUnreachable(x: never): never {
  throw new Error("Didn't expect to get here");
}

そしてあなたのdefault場合にそれを使用してください:

switch (action.type) {
  case "A": {
    ...
  }
  case "B": {
    ...
  }
  default: {
    return assertUnreachable(action);  // CAN'T USE action.type HERE BECAUSE action WILL BE never AND action.type WILL BE any
  }
}

しかし、私はこのように内部で使用することはできませんreducer. レデューサー アクションの網羅性をチェックする限りは機能しますが、実行時にスローされます。これは、Redux が次のような独自の内部アクションでそれを呼び出すためです。

@@redux/INITh.b.0.x.q.h                   // THIS IS THE action.type
@@redux/PROBE_UNKNOWN_ACTIONe.7.b.o.p     // THIS IS THE action.type

switchでは、レデューサー内のステートメントの網羅性を処理する理想的な方法は何ですか?

4

2 に答える 2