【日報】型なしvuexつらい
お休み… みたいなものなのですが、9月13日の日報です。
型なしvuexつらい問題
つらいのかな?と思いつつ適当に書き進めたところ「実際つらい」という認識に至りましたのでご報告します。
リファクタリングつらい
vuex公式の型定義を利用し、その仕組みに乗れば、ステートだけは割ときっちり型で管理できるようになります。
当初、それだけでまあまあ回るのではと思った(そして実際なんとかなった)のですが、一旦書いたコードを直す段階になって、なかなか困る点も出てきました。全面的に困るのですが、最も困りそうなのが「commit
/ dispatch
/ getters
の型定義がないと、コンパイルもテストも失敗しない」という部分です。
コンパイルについては単純なことで、「dispatch
最初の引数は文字列なら何でもオッケー」という型定義しかなければ dispatch("hoge")
だろうが dispatch("fuga")
だろうが通ってしまうわけです。そんなアクションないぞ!みたいなエラーは実行するまで起こりません。大変に困りますね。
またテストに関していえば、モックが旧実装を隠してしまうことがあります。つまりユニットテストを書く場合、テスト対象からさらに呼び出される dispatch
なり commit
なり、そういったものはモックで動作を再現しているかもしれません。そうすると例えば、実際には削除されているにも関わらず、actions
の中では存在しなくなった動作を呼び出す実装のままであり、おまけにテスト用モックも古いままなのでエラーにならない、みたいなことが起こってきます。ドチャクソ困りますね。
せめてコンパイルかテストか、どちらか1つでも落ちれば人間が気づいて直せるわけですが、両方スムーズに通ってしまうと厳しい。そして可能ならコンパイルで落ちてほしい1。そういう次第なので、vuexに型定義をきっちり組み入れる方向で学習追加中です。
-
実行するまで分からないテストの失敗と、IDEが自動検出して赤線まで引いてくれるコンパイルエラーでは、後者の方が生産性が高い↩