Я посмотрел на это, и оно мне не помогло: Ошибка типографского эффекта 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"
}
}