类型 "Observable<unknown>" 无法分配给类型 "Observable<{token:string; }>"。点击错误

The type "Observable<unknown>" cannot be assigned to the type "Observable<{token:string; }>". tap Error

我正在尝试通过 .pipe 方法添加令牌

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
import { HttpClient } from '@angular/common/http';
import { User } from './interfaces';

@Injectable()
export class AuthService {

  private token = null

  constructor(private http: HttpClient) {
  }

  login(user: User): Observable<{token: string}> {
    return this.http.post<{token: string}>('/api/auth/login', user)
     .pipe(tap(({token}) => {
        localStorage.setItem('auth-token', token)
        this.setToken(token)
     }))
  }

  setToken(token: string) {
    this.token = token
  }
}

interfaces.ts

export interface User {
  email: string,
  password: string
}

使用此代码一切正常

  login(user: User): Observable<{token: string}> {
    return this.http.post<{token: string}>('/api/auth/login', user)
  }

当我尝试通过 .pipe 方法添加令牌时出现错误

The type "Observable<unknown>" cannot be assigned to the type "Observable<{token:string; }>".
The "token" property is missing in the "{}" type and is mandatory in the "{token: string; }" type.ts(2322)

一旦我从 'rxjs/operators' 导入 .pipe 中的任何添加方法(tap、map 和其他),就会出现此错误。

你收到这个错误很奇怪,我无法重现它,但这应该可以解决你的问题:

login(user: User): Observable<{token: string}> {
  return this.http.post<{token: string}>('/api/auth/login', user)
   .pipe(tap(({token}) => {
     localStorage.setItem('auth-token', token)
     this.setToken(token)
 })) as Observable<{token: string}>
}