1

我不明白这段代码有什么问题,你能帮我吗?

import { Injectable } from '@angular/core';
import {
  HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
} from '@angular/common/http';

import { Observable } from 'rxjs';
import { switchMap, map } from 'rxjs/operators';

import { AuthenticationSharedStorage } from '../storages/authentication.storage';
import { AuthenticationToken } from '../../models/authentication.model';

@Injectable()
export class AuthenticationInterceptor implements HttpInterceptor {

  constructor(private storage: AuthenticationSharedStorage) {}
  intercept(req: HttpRequest<any>, next: HttpHandler) {
    this.storage.getData()
    .pipe(
      switchMap((data:AuthenticationToken )=> {
      if(data){
        const authToken = data.token;
        const authReq = req.clone({ setHeaders: { Authorization: authToken } });
        return next.handle(authReq);
      }
      return next.handle(req);
      })
    );
  }
}

完整的错误是:

'AuthenticationInterceptor' 类型中的属性 'intercept' 不能分配给基类型 'HttpInterceptor' 中的相同属性。类型 '(req: HttpRequest, next: HttpHandler) => void' 不可分配给类型 '(req: HttpRequest, next: HttpHandler) => Observable>'。类型 'void' 不能分配给类型 'Observable>'。16:3

4

2 回答 2

4

您需要返回一个Observable<HttpEvent<any>>from intercept- 目前没有返回任何内容。假设this.storage.getData()返回一个(可能是真的,因为它有pipe())然后在它之前放一个返回。

intercept(req: HttpRequest<any>, next: HttpHandler) {
  return this.storage.getData()
  //...
}
于 2018-06-13T20:27:45.813 回答
1

我有同样的错误,问题是由于项目和npm包之间的rxjs版本不同引起的。

我通过在项目中安装相同版本的 rxjs 来解决此问题。

于 2021-06-28T10:34:54.257 回答