2017-07-21 17 views
0

私はTypeScript 2.xとReduxを使用しています。私はこのようないくつかのアイテムなしで新しい状態を作成したいかに基づいて、アクションを受け取る減速を持っている:私は物事を削除する基本を考え出し@basaratへTypeScriptでRedux状態を入力して、アイテムなしで新しい状態を作成する方法

export function reducer(state = {}, action) { 
    switch (action.type) { 
    case SOME_ACTION:  
     let newState : { something: string } = state; 
     delete newState.something; 
     return newState; 
    default: 
     return state; 
    } 
} 

感謝を(TypeScript 2: Remove item from 2-field objectを参照してください)。コードは、上記のようなアドバイスに基づいていますが、今私が代わりに私の知る限り、これは私が何とかこの項目を削除するには、受信状態の種類を推測する必要があることを意味を理解するよう

TS2322: Type '{}' is not assignable to type '{ something: string; }'. 
    Property 'something' is missing in type '{}'. 

を取得します。

Redux状態を入力する最良の方法は何ですか?それとも私のアプローチに代わる方法がありますか?

答えて

0

reduxで変異状態をしないでください。例えば。以下は良い考えではありません。

delete newState.something; 

代わりに、その小道具なしで新しいオブジェクトを作成してください。

const {something, ...newState} = state; 
return newState; 

さらに、stateに注釈を付ける必要があります。あなたができる迅速なハック単にanyについて:あなたはまだ混乱している場合

export function reducer(state:any = {}, action) { 

しかし、あなたはより良い注釈を行う上読んでください:迅速なフィードバック@basaratためhttps://basarat.gitbooks.io/typescript/docs/types/type-system.html

+0

感謝を。私は状態を変更するべきではないことを理解しています。それが私が新しい状態を作り出そうとした理由です。 '' 'TS2459:Type '{}'には何かプロパティがなく、文字列のインデックスシグネチャはありません。 '' ''私はまだ何らかの形で国家を入力する必要があると思うようになる。 – langkilde

+0

ええ、それに注釈を付ける必要があります – basarat

関連する問題