タイトルのとおりですが、middlewareでAPIコールで取得したレスポンスの形式を、都合の良いように整形しているコードで、より良いTypeScriptでの型付けができずにいます。
イメージとなるコードを示します。
(試しにtypesafe-actionsを使用してみています)
ts
1import { createAction, isActionOf } from 'typesafe-actions' 2 3interface Hoge { 4 fxck: boolean; 5} 6 7const hogeRequestSuccessAction = createAction('HOGE_REQUEST_SUCCESS', resolve => { 8 return (payload: Hoge[]) => resolve(payload) 9}) 10 11// ---- 12 13const someCalculate = (hoge: Hoge) => { 14 hoge.cool = !hoge.fxck 15 delete hoge.fxck 16 return hoge 17} 18 19const hogeMiddleware = (store) => (next) => (action) => { 20 if (isActionOf(hogeRequestSuccessAction, action)) { 21 // ここでArray<{cool: boolean}>となっているので、この代入で型エラーとなる 22 action.payload = action.payload.map(hoge => someCalculate(hoge)) 23 } 24 next(action) 25}
例えば以下のようにすればコンパイルエラーにはなりませんが、もう少しactionの形式が変更されることをうまく型で表現できる方法があるのかなと思った次第です。
ts
1const hogeMiddleware = (store) => (next) => (action) => { 2 let newAction = { ...action } 3 if (isActionOf(hogeRequestSuccessAction, action)) { 4 newAction.payload = newAction.payload.map(hoge => someCalculate(hoge)) 5 } 6 next(newAction) 7}
なにかアイデアをいただけたら嬉しいです。
あなたの回答
tips
プレビュー