Argument of type 'string | null' is not assignable to parameter of type 'string'. Type 'null' is not assignable to type 'string'.ts(2345)

Viewed 517

Error: Argument of type 'string | null' is not assignable to parameter of type 'string'. Type 'null' is not assignable to type 'string'.ts(2345)

Line of error: this.setSession(res.body._id, res.headers.get('x-access-token'), res.headers.get('x-refresh-token'));


  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');
        console.log(res);
      })
    )
  }

  logout() {
    this.removeSession();
  }

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

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

It looks like one of the arguments res.body._id, res.headers.get('x-access-token'), res.headers.get('x-refresh-token') has null value and you defined their types as a string.

-Try to console.log(res.body._id, res.headers.get('x-access-token'), res.headers.get('x-refresh-token')) and see which one returns null.

-Try to change declaration of private setSession(userId: string, accessToken: string, refreshToken: string) to private setSession(userId: string|null, accessToken: string|null, refreshToken: string|null)

Related