Open Hiroshiba opened 2 years ago
Warningが出ないような定義方法を模索してみます。
ありがとうございます!! とても助かります。
型が循環参照しているので,遅延評価の都合上返り値の型を書かないとNoImplicitAnyのエラーがよく分からない場所に出たり出なかったりします.
556 で書いた型パズルを少し書き直したものをここにも置いておきます. 型が循環参照しているので,遅延評価の都合上返り値の型を書かないとNoImplicitAnyのエラーがよく分からない場所に出たり出なかったりします.
これで遊んでいて気づいたのですが,この型定義だとstore内のActionやGetterで渡ってくるDispatch, Commit, Gettersに型を付けるのは難しそうだと感じました.
dispatch
, commit
, getters
等の ActionContext (injectee)
引数に型を付けるにはStoreOptions
オブジェクトに指定された関数の引数(payload
),戻り値の型を用いる必要があります.
これはtypescriptの型決定順序を考えた時,型を決定したい関数の型を型の評価前に使用していることになるため,それらはany
として評価され,引数(payload
),返り値の型だけを取ってくることが出来ません.
一方,useStoreの型はStoreOptions
の型評価と交差していないので,store
の型を正しく付けることが出来ます.
Reduxでこれが問題にならないのは,reduxのdispatch
はvuexでのcommit
であり,dispatch(actionType(payload))
としても返り値が必要ないからです.
vuex
では,dispatch
は返り値を持つので,dispath
をdispather
の引数に渡すか型キャストしなければいけません.
const myDispatch = dispatch as MyDispatch;
// or
helper(dispatch, "action", payload);
どう考えても初心者歓迎タスクではないので外します 😇
内容
こんな感じでプルリクエストレビューの際にいつもwarningが表示されてしまうので、解決したいのですが、vuex.tsは型パズルも含まれているのでなかなか手を出せずにいます。 いい感じにwarningをなくしていきたいです。
ref
Pros 良くなる点
Cons 悪くなる点
実現方法
VOICEVOXのバージョン
0.?.0
OSの種類/ディストリ/バージョン
その他