1
resposta

No overload matches this call em setHeaders

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
        }
      });
    }
1 resposta

Olá Leonardo, tudo bem com você?

Peço desculpas pela demora em obter um retorno.

Fico feliz em ver sua contribuição para o fórum da Alura, informando como fez para solucionar o erro TS2769: No overload matches this call, sua dica irá auxiliar os estudantes que estão recebendo a mesma mensagem de erro.

Além disso, gostaria de aproveitar a oportunidade e compartilhar com você que atualizamos nossos cursos de Angular com novos recursos e conteúdos para ajudar você a se manter atualizada com as últimas tendências e práticas da indústria. Nestes novos cursos você aprenderá a desenvolver CRUD, trabalhar com formulários, usar o RxJS dentre outras possibilidades, deixo o link abaixo caso queira conhecer e mergulhar em conhecimento:

Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software