【问题标题】:error TS2769: No overload matches this call. Type 'string | null' is not assignable to type 'string | string[]'错误 TS2769:没有重载匹配此调用。键入'字符串 | null' 不可分配给类型 'string |细绳[]'
【发布时间】:2023-03-28 04:07:01
【问题描述】:
export class AuthService {

  constructor(private http: HttpClient, private webService: WebRequestService, private router: Router) { }

  login(email: string, password: string) {
    return this.webService.login(email, password).pipe(
      shareReplay(),
      tap((res: HttpResponse<any>) => {
        // auth tokens will be in the header of this response 
        this.setSession(res.body._id, res.headers.get('x-access-token'), res.headers.get('x-refresh-token'));
        console.log('logged in');
      })
    )
  }

  logout() {
    this.removeSession();
    this.router.navigate(['/login']);
  }

  getAccessToken() {
    return localStorage.getItem('x-access-token');
  }

  getRefreshToken() {
    return localStorage.getItem('x-refresh-token');
  }

  getUserId() {
    return localStorage.getItem('user-id');
  }

  setAccessToken(accessToken: any) {
    return localStorage.setItem('x-access-token', accessToken);
  }

  private setSession(userId: string, accessToken: any, refreshToken: any) {
    localStorage.setItem('user-id', userId);
    localStorage.setItem('x-access-token', accessToken);
    localStorage.setItem('x-refresh-token', refreshToken);
  }

  private removeSession() {
    localStorage.removeItem('user-id');
    localStorage.removeItem('x-access-token');
    localStorage.removeItem('x-refresh-token');
  }

  getNewAccessToken() {
    return this.http.get(`${this.webService.ROOT_URL}/users/me/access-token`, {
      headers: {
        'x-refresh-token': this.getRefreshToken(),
        '_id': this.getUserId()
      },
      observe: 'response'
    }).pipe(
      tap((res: HttpResponse<any>) => {
        this.setAccessToken(res.headers.get('x-access-token'));
      })
    )
  }
}

我需要解决以下错误。请帮忙。 错误:src/app/service/auth.service.ts:61:9 - 错误 TS2769:没有重载匹配此调用。 最后一个重载给出了以下错误。 键入'字符串 | null' 不可分配给类型 'string |细绳[]'。 类型 'null' 不能分配给类型 'string |细绳[]'。 键入'字符串 | null' 不可分配给类型 'string |细绳[]'。 类型 '"response"' 不能分配给类型 '"body" |不明确的'。 错误行:'x-refresh-token': this.getRefreshToken(),

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    阅读存储文档时,您可以看到 Storage.getItem('') 返回 stringnull (see here)。使用您的代码,我假设您在 Angular 和文档中工作,HttpClient headers 对象可以是 string | string[] (see here),因此与类型存在冲突。

    也许您可以尝试这样的方法来修复错误:

    getRefreshToken(): string {
        return localStorage.getItem('x-refresh-token') || '';
     }
    

    【讨论】:

      猜你喜欢
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      • 1970-01-01
      相关资源
      最近更新 更多