尝试返回多个操作时NGRX效果打字稿错误

时间:2018-05-04 13:06:27

标签: angular typescript ngrx ngrx-store ngrx-effects

我尝试在NGRX效果中返回多个动作时遇到一些困难。我知道如何返回多个动作,但我正在尝试根据布尔值设置两组动作。

代码如下:

  @Effect()
  loadCompanyDetail = this.actions$
    .ofType(fromActions.COMPANY_DETAIL_LOAD)
    .pipe(
      switchMap(() => {
        return this.companyService
          .getCompanyByID(
            fromUtility.obs2Str(
              this.routerStore.select(fromRouter.getCompanyId)
            )
          )
          .pipe(
            switchMap(res => {
              switch (res.success) {
                case true:
                  const locations = res.data.locations;
                  const detail = res.data;
                  delete res.data.locations;
                  return [
                    new fromActions.CompanyDetailLoadSuccess(detail),
                    new fromActions.CompanyLocationsLoadSuccess(locations)
                  ];
                case false:
                  return [
                    // new fromActions.CompanyDetailLoadFailure(),
                    // new fromActions.CompanyLocationsLoadFailure()
                  ];
              }
            })
          );
      })
    );

活动时注释掉的操作会引发以下错误:

  

src / company / store / effects / company-detail.effects.ts(34,23)中的错误:   错误TS2345:类型的参数'(res:{success:boolean; msg:string;   数据:公司; })=> (CompanyDetailLoadSuccess | CompanyLo ...'不是   可分配给类型'的参数(值:{success:boolean; msg:   串;数据:公司; },index:number)=> ObservableInput”。       类型'(CompanyDetailLoadFailure | CompanyLocationsLoadFailure)[]'不能分配给'ObservableInput'类型。         类型'(CompanyDetailLoadFailure | CompanyLocationsLoadFailure)[]'不能分配给类型   'ArrayLike'。           索引签名不兼容。             输入'CompanyDetailLoadFailure | CompanyLocationsLoadFailure'不能分配给类型   'CompanyDetailLoadSuccess | CompanyLocationsLoadSuccess'。               类型'CompanyDetailLoadFailure'不能分配给'CompanyDetailLoadSuccess | CompanyLocationsLoadSuccess'。                 类型'CompanyDetailLoadFailure'不能分配给'CompanyLocationsLoadSuccess'。                   属性“类型”的类型不兼容。                     键入“”[公司详细信息]加载失败“'不能分配给类型'”[公司位置]加载成功“'。

我也尝试使用if - else而不是switch case。

包含我要触发的操作的操作文件如下:

import { Action } from '@ngrx/store';

export const COMPANY_DETAIL_LOAD = '[COMPANY DETAIL] Load';
export const COMPANY_DETAIL_LOAD_SUCCESS = '[COMPANY DETAIL] Load Success';
export const COMPANY_DETAIL_LOAD_FAILURE = '[COMPANY DETAIL] Load Failure';

export class CompanyDetailLoad implements Action {
  readonly type = COMPANY_DETAIL_LOAD;
}

export class CompanyDetailLoadSuccess implements Action {
  readonly type = COMPANY_DETAIL_LOAD_SUCCESS;

  constructor(public payload: any) {}
}

export class CompanyDetailLoadFailure implements Action {
  readonly type = COMPANY_DETAIL_LOAD_FAILURE;
}

export type CompanyDetailActions =
  | CompanyDetailLoad
  | CompanyDetailLoadSuccess
  | CompanyDetailLoadFailure;

CompanyLocationsLoadFailure与CompanyDetailLoadFailure完全相同。

非常感谢任何帮助。

提前致谢。

0 个答案:

没有答案