【问题标题】:Ionic - Typescript error - Type is not an array or a string离子 - 打字稿错误 - 类型不是数组或字符串
【发布时间】:2017-08-21 12:45:57
【问题描述】:

我从 Ionic 和 Angular 开始,但我遇到了变量类型的问题。 我正在查询一个输出元素数组的 API。

import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import  {PostService } from '../_providers/post-service';

@Component({
  selector: 'page-home',
  templateUrl: 'home.html',
  providers:[PostService]
})
export class HomePage {
  public posts: any;
  private start:number=0;

  constructor(public navCtrl: NavController, public postService: PostService) {
    this.getPost();
  }
  getPost(){
    return new Promise(
      resolve => {
        this.postService.load(this.start)
        .then(data => {
          console.log(data);
          for(let post of data) {
            this.posts.push(post);
          }
          resolve(true);
        });
      });
}

  doInfinite(infiniteScroll:any) {
   console.log(this.start);
   this.start+=10;
   this.getPost().then(()=>{
       infiniteScroll.complete();
     });
 }

  likePost(post){
    post.likes++;
  }

}

第 23 行,我有这个问题: issue

console.log 返回: console.log

最后,PostService 类如下所示:

import { Injectable } from '@angular/core';
import { Http } from '@angular/http';
import 'rxjs/add/operator/map';

@Injectable()
export class PostService {

  perpage:number = 10;

  constructor(public http: Http) {}

  load(start:number=0) {

    return new Promise(resolve => {

      this.http.get('http://api.voyonsvoir.fr/?[limit]='+this.perpage+'&filter[skip]='+start)
        .map(res => res.json())
        .subscribe(data => {
          resolve(data.posts);

        });
    });
  }
}

感谢您的帮助。

【问题讨论】:

  • 将您的帖子数组初始化为空。尝试除 for..of 以外的其他方法,尝试 for..in 或 javascript forEach 看看这些是否有效。
  • 谢谢 rrd。这是否是声明一个空数组的正确方法 public posts: string[]; > 另外,当我尝试使用 forEach 时,我遇到了这个错误:类型 {} 上不存在属性“forEach”
  • 实际上 for..in 确实有效。但是 for(let post in data) 只返回数组键而不返回内容
  • 从我的角度来看,我做了一些丑陋的事情:getPost(){ return new Promise( resolve => { this.postService.load(this.start) .then(data => { for(let post in data) { this.posts.push(data[post]); } resolve(true); }); }); }

标签: angularjs typescript ionic-framework


【解决方案1】:

您需要在此处添加一些类型:

public posts: any[] = [];

然后从服务方法返回:

load(start:number=0): Promise<any[]> {
    return new Promise<any[]>(resolve => {

注意:最好比any 更具体,但至少应该让它运行起来。

【讨论】:

  • 谢谢西蒙,我已经添加了公共帖子行。不确定如何处理 greet() 函数。你指的是 PostService 类文件还是我的 HomePage 类文件?
  • 对不起,我一定有一个复制/粘贴文物:load(): Promise&lt;any[]&gt; { return new Promise&lt;any[]&gt;(resolve =&gt; { 但是,
  • 核心问题是 TypeScript 不知道你的函数中的 promise 解析为一个数组,所以它不知道 data 是一个数组。如果你注释掉加载函数,应该没问题。
猜你喜欢
  • 2019-11-21
  • 2022-06-15
  • 2019-01-24
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 2018-07-25
  • 2021-08-20
  • 2022-01-03
相关资源
最近更新 更多