使用NgRx 8.2管理状态在Angular 8.0应用程序中出现错误。

export interface AppState {
  loggedIn: boolean;
  userInfo: IPrincipal;
}

export interface State {
  state: AppState;
}

export interface IPrincipal {
  email: string;
  password: string;
}


我编写了一个简单的Login服务,该服务返回所需的信息

动作已定义为

export const login = createAction('[Login Initiatied] Login',
  props<{ principal: IPrincipal }>()
);

export const loginSuccess = createAction('[Login Success] Login',
  props<{ userProfile: IUserProfile }>()
);

export const loginFailure = createAction('[Login Failure] Login',
  props<{ message: any }>()
);



用户个人资料只是具有更多详细信息的另一个界面

export interface IUserProfile {
  user: IPrincipal;
  first: string;
  last: string;
}


当我尝试插入效果时


import * as AppActions from './actions/login.action';

login$ = createEffect(() =>
  this.actions$.pipe(
    ofType(AppActions.login),
    map( action => action.principal),
    exhaustMap( (principal: IPrincipal) =>
      this.loginService.loginUser(principal.email, principal.password).pipe(
        map(userProfile => of( AppActions.loginSuccess({ userProfile }))),
        catchError(message => of( AppActions.loginFailure({ message })))
      )
    )
  )
  );


我尝试了几件事,但在login$的影响下,我遇到了这些错误

ERROR in src/app/app.effects.ts(32,3): error TS2322: Type 'Observable<{} | Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">>>' is not assignable to type 'Observable<Action> | ((...args: any[]) => Observable<Action>)'.
      Type 'Observable<{} | Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">>>' is not assignable to type 'Observable<Action>'.
        Type '{} | Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">>' is not assignable to type 'Action'.
          Property 'type' is missing in type '{}' but required in type 'Action'.


    ERROR in src/app/app.effects.ts(32,3): error TS2322: Type 'Observable<Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">> | ({ message: any; } & TypedAction<"[Login Failure] Login">)>' is not assignable to type 'Observable<Action> | ((...args: any[]) => Observable<Action>)'.
      Type 'Observable<Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">> | ({ message: any; } & TypedAction<"[Login Failure] Login">)>' is not assignable to type 'Observable<Action>'.
        Type 'Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">> | ({ message: any; } & TypedAction<"[Login Failure] Login">)' is not assignable to type 'Action'.
          Property 'type' is missing in type 'Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">>' but required in type 'Action'.


    ERROR in src/app/app.effects.ts(32,3): error TS2322: Type 'Observable<Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">> | ({ message: any; } & TypedAction<"[Login Failure] Login">)>' is not assignable to type 'Observable<Action> | ((...args: any[]) => Observable<Action>)'.
      Type 'Observable<Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">> | ({ message: any; } & TypedAction<"[Login Failure] Login">)>' is not assignable to type 'Observable<Action>'.
        Type 'Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">> | ({ message: any; } & TypedAction<"[Login Failure] Login">)' is not assignable to type 'Action'.
          Property 'type' is missing in type 'Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">>' but required in type 'Action'.


    ERROR in src/app/app.effects.ts(32,3): error TS2322: Type 'Observable<Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">> | ({ message: any; } & TypedAction<"[Login Failure] Login">)>' is not assignable to type 'Observable<Action> | ((...args: any[]) => Observable<Action>)'.
      Type 'Observable<Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">> | ({ message: any; } & TypedAction<"[Login Failure] Login">)>' is not assignable to type 'Observable<Action>'.
        Type 'Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">> | ({ message: any; } & TypedAction<"[Login Failure] Login">)' is not assignable to type 'Action'.
          Property 'type' is missing in type 'Observable<{ userProfile: IUserProfile; } & TypedAction<"[Login Success] Login">>' but required in type 'Action'.


这很明显我很想念,但只是无法转头看看我错过了什么。

map(userProfile => of( AppActions.loginSuccess({ userProfile })))


假定返回一个“可观察到的动作”,但它抱怨没有。

通过导出较早版本的Action并有效地使用它,我能够使用较早版本的实现成功创建。

最佳答案

您需要从效果中返回一个动作,因此这一行代码

map(userProfile => of( AppActions.loginSuccess({ userProfile })))


您可以更改为

map(userProfile => new AppActions.loginSuccess({ userProfile }))

关于javascript - 发布插件对状态管理的影响,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57455676/

10-13 06:32