NGRX: ошибка TS2345 при попытке вернуть несколько действий - PullRequest
0 голосов
/ 07 октября 2018

Я посмотрел на это, и оно мне не помогло: Ошибка типографского эффекта NGRX при попытке вернуть несколько действий

Я пытаюсь настроить эффект аутентификации, где:

 @Effect()
  init$ = defer(() => {
    const tokenData = localStorage.getItem(USER);
    return tokenData
      ? of(new Login({ tokenData: JSON.parse(tokenData) }))
      : of(new Logout());
  });

Вот ошибка, которую я получаю:

ERROR in src/app/auth/auth.effects.ts(37,17): error TS2345: Argument of type '() => Observable<Login> | Observable<Logout>' is not assignable to parameter of type '() => void | Subscribable<never> | Subscribable<Login> | PromiseLike<Login> | InteropObservable<L...'.
  Type 'Observable<Login> | Observable<Logout>' is not assignable to type 'void | Subscribable<never> | Subscribable<Login> | PromiseLike<Login> | InteropObservable<Login>'.
    Type 'Observable<Logout>' is not assignable to type 'void | Subscribable<never> | Subscribable<Login> | PromiseLike<Login> | InteropObservable<Login>'.
      Type 'Observable<Logout>' is not assignable to type 'InteropObservable<Login>'.
        Property '[Symbol.observable]' is missing in type 'Observable<Logout>'.

Действия аутентификации довольно просты ...

import { Action } from '@ngrx/store';
import { ITokenData } from './_interfaces/token-data.interface';

export enum AuthActionTypes {
  LoginAction = '[Login] Action',
  LogoutAction = '[Logout] Action'
}

export class Login implements Action {
  readonly type = AuthActionTypes.LoginAction;
  constructor(public payload: { tokenData: ITokenData }) {}
}

export class Logout implements Action {
  readonly type = AuthActionTypes.LogoutAction;
}

export type AuthActions = Login | Logout;

Может ли кто-нибудь помочь мне понять, почему это так?происходит?Нет ошибки, когда я возвращаю только одно действие, не имеет значения, если это логин или выход из системы ... я просто не могу иметь их обоих, даже если они заключены в if / else.

// package.json

{
  "name": "google-map",
  "version": "0.0.0",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@agm/core": "^1.0.0-beta.5",
    "@angular/animations": "^6.1.0",
    "@angular/common": "^6.1.0",
    "@angular/compiler": "^6.1.0",
    "@angular/core": "^6.1.0",
    "@angular/forms": "^6.1.0",
    "@angular/http": "^6.1.0",
    "@angular/platform-browser": "^6.1.0",
    "@angular/platform-browser-dynamic": "^6.1.0",
    "@angular/router": "^6.1.0",
    "@ngrx/effects": "^6.0.1",
    "@ngrx/entity": "^6.0.1",
    "@ngrx/router-store": "^6.0.1",
    "@ngrx/store": "^6.0.1",
    "@ngrx/store-devtools": "^6.0.1",
    "core-js": "^2.5.4",
    "rxjs": "^6.2.0",
    "zone.js": "~0.8.26"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.7.0",
    "@angular/cli": "~6.1.3",
    "@angular/compiler-cli": "^6.1.0",
    "@angular/language-service": "^6.1.0",
    "@ngrx/schematics": "^6.1.0",
    "@types/jasmine": "~2.8.6",
    "@types/jasminewd2": "~2.0.3",
    "@types/node": "~8.9.4",
    "codelyzer": "~4.2.1",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~1.7.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.0",
    "karma-jasmine": "~1.1.1",
    "karma-jasmine-html-reporter": "^0.2.2",
    "ngrx-store-freeze": "^0.2.4",
    "protractor": "~5.3.0",
    "ts-node": "~5.0.1",
    "tslint": "~5.7.0",
    "typescript": "~2.7.2"
  }
}
...