2017-12-20 20 views
-1

私はちょうどTypescript(v 2.6.1)でreact reduxを開始していますが、私はVS 2017定型文から少しのアプリを開発しています。私の5番目のビューでは、何らかの理由でアクションを作成する際に問題があることがわかります。基本的に非常に単純化されたコードで、以下のコードでは、Multiplyアクションで乗算器を削除しても乗算器を追加しないと非常に簡単に動作するはずです。私はそれを理解することはできません。パラメータ 'action'と 'action'のタイプは互換性がありません

これを単純化して修正しようとすると、次のコードが動作していないことがわかります。これは非常に厳しいものです。

import { AppThunkAction } from "ClientApp/store"; 
import { Action, Reducer } from 'redux'; 
import { fetch, addTask } from 'domain-task'; 
import update from 'immutability-helper'; 

// The top-level state object 
export interface CompoundState { 
    value: number, 
} 

export interface AddAction { 
    type: 'ADD_ACTION', 
    addend:number 
} 

export interface MultiplyAction { 
    type: 'MULTIPLY_ACTION', 
    multiplier:number 
} 

type KnownAction = AddAction | MultiplyAction 
export const actionCreators = { 
    add: (addend): AppThunkAction<AddAction> => (dispatch, getState) => { 
     dispatch({ type: 'ADD_ACTION', addend: addend }) 
    }, 
    multiply: (multiplier): AppThunkAction<MultiplyAction> => (dispatch, getState) => { 
     dispatch({ type: 'MULTIPLY_ACTION', multiplier: multiplier }) 
    }, 
} 

const unloadedState: CompoundState = 
{ 
    value: 0, 
}; 
export const reducer: Reducer<CompoundState> = (state: CompoundState, action: KnownAction) => { 

    switch (action.type) { 
     case 'ADD_ACTION': 
      return update(state, { 
       value: { 
        $set: state.value + action.addend 
       } 
      }); 
     case 'MULTIPLY_ACTION': 
      return update(state, { 
       value: { 
        $set: state.value * action.multiplier 
       } 
      }); 

    } 
    return state || unloadedState; 
}; 

あなたはどう思いますか?

答えて

0
export const reducer: Reducer<CompoundState> = (state: CompoundState, incomingAction: Action) => { 
    const action = incomingAction as KnownAction; 
    switch (action.type) { 
     case 'ADD_ACTION': 
      return update(state, { 
       value: { 
        $set: state.value +1 
       } 
      }); 
     case 'MULTIPLY_ACTION': 
      return update(state, { 
       value: { 
        $set: state.value * 2 
       } 
      }); 

    } 
    return state || unloadedState; 
}; 

誰かを助けてくれることを願っています。

関連する問題