首页 > 解决方案 > Angular 11 的问题 - 类型承诺上不存在属性名称与 RXJS

问题描述

我一直在使用 Angular 11 进行项目,我使用 HttpClientModule 和 RxJS 来使用 SWAPI。我有这段代码,我是为了找人,但我不能,因为当尝试将数据转换为 JSON 时,我收到消息“类型承诺上不存在属性名称”

我的这项服务的代码是:

import { Injectable } from '@angular/core';
import { People } from './people';
import { Observable } from 'rxjs';
import { map, catchError } from 'rxjs/operators';
import 'rxjs/add/operator/catch'
import { HttpClient } from '@angular/common/http';

@Injectable()
export class PeopleService {

  constructor(private http: HttpClient) { }

  getPeople(): Observable<People[]> {
    return this.http
               .get<People[]>("https://swapi.co/api/people")
               .pipe(
                 map(this.toJSON),
                 catchError(err => this.handleError)
               )

  }

  private toJSON(res: Response) {
    const json = res.json();
    return json.results || json.data;
  }

}

标签: angularrxjs

解决方案


默认情况下,Angular 从 API 调用接收数据为 JSON,因此无需转换

将您的代码简化为


import { Injectable } from '@angular/core';
import { People } from './people';
import { Observable } from 'rxjs';
import { map, catchError } from 'rxjs/operators';
import { HttpClient } from '@angular/common/http';

@Injectable()
export class PeopleService {

  constructor(private http: HttpClient) { }

  getPeople = ()=>
     this.http.get<People[]>("https://swapi.co/api/people").pipe(
        map(this.extractData),
        catchError(err => this.handleError)
      )

  private extractData = (res: Response) => json.results || json.data;

}

你可以看看下面的演示


推荐阅读