0

Store.select は、私が観察したいストアのプロパティを彼に伝える文字列を取得する必要がありますが、問題は、彼がそれらのプロパティを持っていないことです。代わりに、状態プロパティを公開するプロパティとしてレデューサー関数があります。

https://github.com/ngrx/storeによって、何かがおかしいことに簡単に気付くことができます。

該当するコード:

counter: Observable<number>;
constructor(public store: Store<AppState>){
     this.counter = store.select('counter');
}

私のコード:

export interface AppState{
  connectedAccountId:number;
}
@Injectable()
export class ConnectedAccountService {
  public connectedAccountId$:Observable<number>;
  constructor(private _store:Store<AppState>,private _accountService:AccountService)
  {
    this.connectedAccountId$ = this._store
      .select(state=>
      {
        console.log(state);
        let id:number=state.connectedAccountId; //x=undefined because state doesn't have 'connectedAccountId' property.
        return state.connectedAccountReducer.connectedAccountId; //this line is working!
        // Error:(35, 22) TS2339: Property 'connectedAccountReducer'
        // does not exist on type 'AppState'.
      });

    this.connectedAccountId$ = this._store.select("connectedAccountId");
    // Error:(37, 5) TS2322: Type 'Observable<{}>' is not
    // assignable to type 'Observable<number>'.
    // Type '{}' is not assignable to type 'number'.
  }

次のコードは機能し、大きなエラーで必要なことを行います。

this.connectedAccountId$ = this._store
      .select(state=>
      {
        return state.connectedAccountReducer.connectedAccountId; //this line is working!
        // Error:(35, 22) TS2339: Property 'connectedAccountReducer'
        // does not exist on type 'AppState'.
      });

タイプスクリプトがこれらのエラーをスローするのはなぜですか? どうすれば修正できますか?

4

1 に答える 1

0

私のブーストラップ:

bootstrap(AppComponent, [
  AccountService,ConnectedAccountService,
  provideStore({connectedAccountReducer})
]);

変更:

bootstrap(AppComponent, [
      AccountService,ConnectedAccountService,
      provideStore(connectedAccountReducer) //{} removed.
    ]);

プロバイダ ストア内で {} を使用している場合は、うまく機能する @Max ソリューションを使用します。 state['reducer function name'].state property

于 2016-07-30T22:54:02.883 に答える