Angular 6和RxJS 6重大更改

时间:2018-09-02 22:10:20

标签: angular typescript rxjs

我已经在谷歌上找到了答案,但找不到解决方法。

一段时间以来,我一直在使用这样的代码。 http是有角的HttpClient。

 forgotPassword(email: string): Observable<ApiReturn> {
        const url = `${this.apiURL}/ForgotPassword`;
        const params = {
            email
        };
        return this.http
            .post<ApiReturn>(url, params, this.requestOptions)
            .pipe(catchError(e => this.handleError(e)));
    }

我更新到了最新的Angular 6.x版本和RxJS 6(从5.5开始)。现在,代码在抱怨catchError:

  

“ OperatorFunction”类型的参数不能分配给“ OperatorFunction”类型的参数。     参数“源”和“源”的类型不兼容。       不能将“可观察”类型分配给“可观察”类型。

我的HttpInterceptor现在也无法编译。

import { Injectable } from '@angular/core';
import {
    HttpEvent,
    HttpInterceptor,
    HttpHandler,
    HttpRequest,
    HttpResponse
} from '@angular/common/http';
import { Log, Level } from 'ng2-logger/client';
import { Observable } from 'rxjs';
import { map, tap } from 'rxjs/operators';

@Injectable()
export class AuthInterceptor implements HttpInterceptor {
    constructor() {
    }

    intercept(
        req: HttpRequest<any>,
        next: HttpHandler
    ): Observable<HttpEvent<any>> {
        // Get the auth header from the service.
        // const authHeader = this.global.authenticationToken;
        // Clone the request to add the new header.
        const authReq = req.clone({
            headers: req.headers
                .set('Access-Control-Allow-Origin', window.location.href)
        });
        // Pass on the cloned request instead of the original request.
        return next.handle(authReq);
    }
}
  

错误:[ts]类型   'import(“ c:/ ProjDotNet / collegebowl-site / node_modules / @ angular / core / node_modules / rxjs / internal / Observable”)。可观察>>   不可分配给类型   'import(“ c:/ ProjDotNet / collegebowl-site / node_modules / rxjs / internal / Observable”)。可观察>。   财产类型'   源”不兼容。

基本上是相同的问题。

我收集到了管道功能中缺少的一些基本知识,但是我无法弄清楚或者找不到一个正在做我正在做的例子。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

更仔细地查看错误消息。它说

bin

JAVA_HOME

是不同的类型。也就是说,实际上您有两种不同的Observable,它们分别来自RxJS的不同副本,这些副本位于文件系统的不同目录中。

也就是说,您的node_modules处于非常奇怪的状态。运行import("c:/ProjDotNet/collegebowl-site/node_modules/@angular/core/node_modules/rxjs/internal/Observable").Observable> import("c:/ProjDotNet/collegebowl-site/node_modules/rxjs/internal/Observable").Observable> 可能会提示为什么npm / yarn认为两次安装RxJS是个好主意。

答案 1 :(得分:0)

就像@meriton所说,这是因为在多个node_modules中有多个rxjs实例。 我发现最好的解决方案是在tsconfig.json中添加一个别名,以强制在各处使用相同的rxjs:

=ARRAYFORMULA({indirect("'"&WeekINTERMEDIATE!EE3&"'"&"!A:BA"),indirect("'"&WeekINTERMEDIATE!EE4&"'"&"!A:BA"}))