2016-11-24 23 views
4

TypeScriptとVisual Studioコードが初めてです。プロパティ 'payload'がタイプ 'アクション'に存在しません

*[ts] Property 'payload' does not exist on type 'Actions'.

マイコード:

action.tsファイル: 私は次の取得中にエラーが発生しています

import { Action } from '@ngrx/store'; 
    import { Item } from '../models/list'; 

    export class AddBookAction implements Action { 
     type = ActionTypes.ADD_BOOK; 

     constructor(public payload: Item) { } 
    } 

    export type Actions = AddBookAction; 

reducer.tsを

import * as list from 'action'; 

export function reducer(state = initialState, action: list.Actions): State { 

switch (action.type) { 
    case list.ActionTypes.LOAD: { 
     return Object.assign({}, state, { 
     loading: true 
     }); 
    } 

    case list.ActionTypes.LOAD_SUCCESS: { 
     const books = action.payload // Error here 

     return { 
     loaded: true, 
     loading: false, 
     ids: books.map(book => book.id) 
     }; 
    } 
} 

何かアドバイスは次のようになります非常に役立ちます。

+0

もう一つの推測では、あなたが組合にLoadSuccess型を忘れてしまったということでしょうか? VSCodeはそのエラーを投げているのですか、あるいはTypescriptコンパイラも同様に不平を言っていますか? – olsn

+1

同じエラーが発生しました... typescriptバージョン2.0.3を使用しました – Daskus

+0

エラーは表示されず、TypeScript 2.0.10を使用しています。 – cartant

答えて

2

それが不完全であるようにあなたのルックスを掲載コード、reducer.tsにあなたがlist.ActionTypes.LOAD_SUCCESSを使用しているので、しかし、これはあなたが投稿action.tsの一部ではありません。

だからあなたのLoadSuccessActionには​​-attirbuteがありません。 public payload: Item。あなたはどのような活字版を使用している

export type Actions = AddBookAction | LoadSuccessAction; 
+0

いくつかのアクションでペイロードアイテムが不足していました。 'action:list.Actions'という' action:Action'のインスタントを使う利点は何ですか?ペイロードが両方のケースでタイプされていないと意味がありません... – Daskus

+1

利点は、 'list.Actions'では、減速機が受け入れる定義済みのアクションセットがあることです。実行時ではなくコンパイル時に 'type-mismatch errors(またはあなたのようなエラー)が発生する可能性があります(' action:Action'の場合) - 詳細な技術情報はこちらhttps://www.typescriptlang.org/ docs/handbook/advanced-types.html#discriminated-unions – olsn

+0

私はそれを手に入れません。ほとんどの場合、減速者は、他の減速機からの行動にも反応して状態を変えたいと思うか、またはアクションがペイロードを必要としないことがあります。このようにして、すべてのアクションにペイロード(私の意見ではオーバヘッドになる)+他のレデューサーにアクセスできないアクションを与える必要があります。アクションペイロード自体が入力されると、それぞれのプロパティを見ることができますアクションのペイロードは、コンパイル時に/をコンパイルするときに持ちます。 – Daskus

関連する問題