Búsqueda de sitios web

typescript - "Ninguna sobrecarga coincide con esta llamada" en Angular 11


Estaba haciendo un tutorial de Angular, cuando me encontré con el siguiente error en el archivo home.component.ts:

Ninguna sobrecarga coincide con esta llamada. La sobrecarga 1 de 5, '(observer?: PartialObserver): Subscription', dio el siguiente error. El argumento de tipo '(data: any[]) => void' no se puede asignar al parámetro de tipo 'PartialObserver'. La propiedad 'complete' falta en el tipo '(data: any[]) => void', pero es requerida en el tipo 'CompletionObserver'. La sobrecarga 2 de 5, '(next?: (value: HttpResponse) => void, error?: (error: any) => void, complete?:() => void): Subscription', dio el siguiente error. El argumento de tipo '(data: any[]) => void' no se puede asignar al parámetro de tipo '(value: HttpResponse) => void'. Los tipos de los parámetros 'data' y 'value' son incompatibles. Al tipo 'HttpResponse' le faltan las siguientes propiedades del tipo 'any[]': length, pop, push, concat, y 26 más.

Lo he buscado, pero no he podido encontrar ninguna solución a este problema. He intentado desactivar strict, noImplicitAny, noImplicitReturns en el tsconfig.json, pero no han solucionado este problema. Preferiría que hubiera una solución a este problema manteniendo las tres configuraciones en true en el archivo tsconfig.json.

Cualquier ayuda sería apreciada.

Gracias

EDITAR: El error ocurre en el archivo home.component.ts al manejar los datos después de la llamada AJAX:

this.dataService.sendGetRequest().subscribe(data: any[] => {
      this.products = data;
    });
  }

Respuesta #1

Solución: cambia any[] a any en el método subscribe así;

this.dataService.sendGetRequest().subscribe(data: any => {
      this.products = data;
    });
  }

Respuesta #2

Primero: sería una cortesía si pusieras tu código relevante en la propia pregunta, en lugar de solo el enlace a stackblitz. Lo primero que te da el mensaje de error es: qué archivo, qué línea, qué posición (Error en src/app/home/home.component.ts (19:49)). Lo cual es

    this.dataService.sendGetRequest().subscribe((data: any[]) => {
//                                              ^ about here

Segundo: pones observe: "response" en tu llamada a HttpClient. Bueno, en ese caso no obtendrás simplemente data: any[] en tu objeto de respuesta, sino un objeto HttpResponse completo. Necesitas acceder a su propiedad body. Sugiero agregar

map({ body } => body)

al final del pipe en sendGetRequest en DataService.

Artículos relacionados