Ошибка машинописания эффекта NGRX при попытке вернуть несколько действий - PullRequest
0 голосов
/ 04 мая 2018

Я сталкиваюсь с некоторыми трудностями при попытке вернуть несколько действий в моем эффекте 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». Типы свойств 'type' несовместимы. Тип '"[КОМПАНИЯ ДЕТАЛИ] Сбой загрузки" "нельзя назначить типу" "[РАСПОЛОЖЕНИЯ КОМПАНИИ] Загрузка успешна"'.

Я также пытался использовать if - else вместо переключателя.

Файл действия, который содержит действие, которое я пытаюсь запустить, выглядит следующим образом:

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.

Любая помощь очень ценится.

Заранее спасибо.

...