nativescript - ошибка сборки Android с помощью tns Аргумент типа «Объект» не может быть назначен параметру типа «Ответ» - PullRequest
0 голосов
/ 01 февраля 2019

Я создаю приложение на nativescript и получаю следующие сообщения об ошибках при сборке Android:

src / app / services / cab.service.ts (21,86): ошибка TS2345: Аргумент типа 'Objectне может быть назначен параметру типа Response.Тип «Объект» назначается очень немногим другим типам.Вы хотели использовать вместо этого любой тип?Свойство «тип» отсутствует в типе «Объект».src / app / services / cab.service.ts (27,86): ошибка TS2345: Аргумент типа «Объект» нельзя назначить параметру типа «Ответ».Тип «Объект» назначается очень немногим другим типам.Вы хотели использовать вместо этого любой тип?src / app / services / cab.service.ts (33,86): ошибка TS2345: Аргумент типа «Объект» нельзя назначить параметру типа «Ответ».Тип «Объект» назначается очень немногим другим типам.Вы хотели использовать вместо этого тип 'any'?

Это мой cab.service.ts

import { Injectable } from '@angular/core';
import { Cabin } from '../shared/cabin';
import { Observable } from 'rxjs';
import { Http, Response } from '@angular/http';
import { HttpClient, HttpHeaders } from "@angular/common/http";
import { baseURL } from '../shared/baseurl';
import { ProcessHTTPMsgService } from './process-httpmsg.service';
import { map } from "rxjs/operators";
import { catchError } from "rxjs/operators";

@Injectable()
export class CabinService {

  cabins: Cabin[];

  constructor(private http: HttpClient,
              private processHTTPMsgService: ProcessHTTPMsgService) { }

  getCabins(): Observable<Cabin[]> {
    return this.http.get(baseURL + 'cabins')
                    .pipe(map(res => { return this.processHTTPMsgService.extractData(res); }),
                    catchError(error => { return this.processHTTPMsgService.handleError(error); }));
  }

  getCabin(id: number): Observable<Cabin> {
    return  this.http.get(baseURL + 'cabins/'+ id)
                    .pipe(map(res => { return this.processHTTPMsgService.extractData(res); }),
                    catchError(error => { return this.processHTTPMsgService.handleError(error); }));
  }

  getFeaturedCabin(): Observable<Cabin> {
    return this.http.get(baseURL + 'cabins?featured=true')
                    .pipe(map(res => { return this.processHTTPMsgService.extractData(res)[0]; }),
                    catchError(error => { return this.processHTTPMsgService.handleError(error); }));
  }

}

Строка 21, 23, 33 имеет этот код:

 .pipe(map(res => { return this.processHTTPMsgService.extractData(res); }),

Я новичок в машинописи и нативной скрипте

Это мой processHttpMessage.service import {Injectable} из '@ angular / core';

import { Observable } from 'rxjs';
import { Http, Response } from '@angular/http';
import { throwError } from 'rxjs';

@Injectable()
export class ProcessHTTPMsgService {

  constructor() { }

  public extractData(res: Response) {
    let body = res.json();
    return body || { };
  }

  public handleError (error: Response | any) {
    let errMsg: string;
    if (error instanceof Response) {
      const body = error.json() || '';
      const err = body.error || JSON.stringify(body);
      errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
    } else {
      errMsg = error.message ? error.message : error.toString();
    }
    return throwError(errMsg);


  }
}

1 Ответ

0 голосов
/ 01 февраля 2019

При использовании HttpClient по умолчанию вы будете получать данные JSON, если вы не измените responseType или не наблюдаете параметры .

res - это уже ваш JSON-объект, поэтому он должен быть

public extractData(res: any) {
    // Unless you have further extraction to be done, this method is not required at all
    return res;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...