发布插件对状态管理的影响

时间:2019-08-12 04:34:15

标签: javascript angular redux rxjs ngrx

管理状态使用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 }>()
);

Userprofile只是另一个具有更多详细信息的界面

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类,并有效地利用它。

1 个答案:

答案 0 :(得分:1)

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

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

您可以更改为

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