类型“对象”上不存在属性“地图”

时间:2020-01-23 10:24:03

标签: angular typescript

我最近进入Angular和TypeScript并试图学习一些东西,并找到了一个可以尝试的特定项目(如果有人想查看该项目,我可以在链接中进行编辑)(尝试从中读取json数据宠物小精灵api)

此行中的“对象”类型上不存在属性“地图”。 .then(items => items.map((item, idx) =>

这是完整的代码

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import 'rxjs/add/operator/toPromise';

@Injectable()
export class PokedexService {
  private baseUrl: string = 'https://pokeapi.co/api/v2/pokemon/';
  private baseSpriteUrl: string = 'https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/';

  constructor(private http: HttpClient) { }

  getPokemon(offset: number, limit: number) {
    return this.http.get(`${this.baseUrl}?offset=${offset}&limit=${limit}`)
      .toPromise()

      //.then(response => response.json().results)
      //.map((results = > response.json()))

      .then(items => items.map((item, idx) => {
        const id: number = idx + offset + 1;
        return {
          name: item.name,
          sprite: `${this.baseSpriteUrl}${id}.png`,
          id
        };
      }));
  }
}

当我尝试运行项目时,我首先收到此脚本的json部分(对象上不存在json)的错误,然后我了解到使用新更新不需要这些行,因此我将它们注释掉。 (不知道是对是错)之后,我得到了我现在要问的错误。

我希望我没有做错任何事情,并等待任何指导。 再说一次,我是这个领域的新手,但是会编码。

1 个答案:

答案 0 :(得分:0)

如果您声明返回的值(即Items []),则可以运行.map 通常,API服务和组件之间是分开的,所以看起来像这样:

api.service.ts

public GetPokemon(): Observable<Items[]> {
        const url = this.url_to_backend_method;
        return this.http.get<Items[]>(url)
            .pipe(catchError(this.handleError));
    }

component.ts

private getPokemon() {
        this.api.GetPokemon().subscribe(
            items => items.map((item, idx) => {
                ** run your logic here **};
            }, error => {
                ** deal with error here **
            });
    }

希望这会有所帮助