https://www.azavea.com/blog/2019/12/12/modeling-state-with-typescript/

TypeScriptのinterfaceでそれぞれのステートの型を定義し、ステートが取れる次のステートを定義する方法について。 Condictional Typesを使った実装方法、それぞれのステート型に対するエラーメッセージの定義などについて