【问题标题】:nativescript - error with tns build android Argument of type 'Object' is not assignable to parameter of type 'Response'nativescript - tns build android 错误“对象”类型的参数不可分配给“响应”类型的参数
【发布时间】:2019-06-26 07:39:01
【问题描述】:

我正在构建一个 nativescript 应用程序并在 tns 构建 android 时收到这些错误:

src/app/services/cabin.service.ts(21,86):错误 TS2345:“对象”类型的参数不可分配给“响应”类型的参数。 “对象”类型可分配给极少数其他类型。您的意思是改用“任何”类型吗? “对象”类型中缺少属性“类型”。 src/app/services/cabin.service.ts(27,86):错误 TS2345:“对象”类型的参数不可分配给“响应”类型的参数。 “对象”类型可分配给极少数其他类型。您的意思是改用“任何”类型吗? src/app/services/cabin.service.ts(33,86):错误 TS2345:“对象”类型的参数不可分配给“响应”类型的参数。 “对象”类型可分配给极少数其他类型。您的意思是改用 'any' 类型吗?

这是我的cabin.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); }),

我是 typescript 和 nativescript 的新手

这是我的流程HttpMessage.service 从'@angular/core'导入{ Injectable };

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);


  }
}

【问题讨论】:

    标签: android angular typescript nativescript


    【解决方案1】:

    默认使用HttpClient 时,您将收到JSON 数据,除非您修改responseType or observe parameters

    res 已经是你的 JSON 对象了,所以它应该是

    public extractData(res: any) {
        // Unless you have further extraction to be done, this method is not required at all
        return res;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-14
      • 2021-03-08
      • 2018-06-13
      • 2023-04-09
      • 1970-01-01
      • 2021-09-03
      • 2021-10-10
      • 1970-01-01
      相关资源
      最近更新 更多