Para quem deixou a opção strict do Typescript como true, como eu, e também deixou a assinatura do getToken como "string | null", deve estar recebendo o seguinte erro no interceptor, que me deixou confuso no início:
if (this.tokenService.hasToken()) {
const token = this.tokenService.getToken();
request = request.clone({
setHeaders: {
'x-access-token': token
}
});
}
TS2769: No overload matches this call. Overload 1 of 3, '(update: { headers?: HttpHeaders | undefined; context?: HttpContext | undefined; reportProgress?: boolean | undefined; params?: HttpParams | undefined; ... 6 more ...; setParams?: { ...; } | undefined; }): HttpRequest<...>', gave the following error. Type 'string | null' is not assignable to type 'string | string[]'. Type 'null' is not assignable to type 'string | string[]'. Overload 2 of 3, '(update: { headers?: HttpHeaders | undefined; context?: HttpContext | undefined; reportProgress?: boolean | undefined; params?: HttpParams | undefined; ... 6 more ...; setParams?: { ...; } | undefined; }): HttpRequest<...>', gave the following error. Type 'string | null' is not assignable to type 'string | string[]'.
O problema é que a constante token tem o tipo "string | null", e os campos do objeto setHeaders só podem ter o tipo string. A solução foi tipar a constante como string, e além disso usar a exclamação na chamada do getToken para dizer ao typescript que eu garanto que o valor retornado não vai ser null (pois testei antes se havia token):
if (this.tokenService.hasToken()) {
const token: string = this.tokenService.getToken()!;
request = request.clone({
setHeaders: {
'x-access-token': token
}
});
}