离子 2 - 打字稿 |填充接口对象数组

Posted

技术标签:

【中文标题】离子 2 - 打字稿 |填充接口对象数组【英文标题】:Ionic 2 - TypeScript | Populate an array of interface objects 【发布时间】:2017-02-26 10:48:24 【问题描述】:

在问这个问题之前我确实做了功课,我相信你们中的一些人会觉得它很愚蠢,但我对 Typescript 还是有点陌生​​,我完全在努力解决这个问题。

我有一个界面:

export interface Product 
  name?: string;
  image_rul?: string;
  description?: string;
  price?: number;
  quantity?: number;

我正在尝试创建一个 Product 类型的数组并用随机值填充该数组。

为了进一步解释我自己,我是这样做的:

export class HomePage 
  products: Product[];
  constructor(public navCtrl: NavController) 
    for (var i=0; i< 10; i++) 
      var random: number =  Math.floor(Math.random() * 10) + 1;
      this.products[i] = <Product>
        name: `Test_$i`,
        image_rul: "https://unsplash.it/200/?random",
        description: "This is a short description",
        price: random,
        quantity: i
      ;
    
    console.log(this.products);
  

当我运行它时,我得到一个错误:

polyfills.js:3 Error: Uncaught (in promise): Error: Error in ./HomePage class HomePage_Host - inline template:0:0 caused by: Cannot set property '0' of undefined(…)

请问你能引导我走向正确的方向吗?我做错了什么或如何解决?

非常感谢。

【问题讨论】:

可能重复:***.com/questions/10673237/… 【参考方案1】:

在 typescript 中定义类成员时:

class A 
    member: string[];

它并没有真正在编译的 js 代码中创建该成员:

var A = (function () 
    function A() 
    
    return A;
());

您需要初始化该成员:

export class HomePage 
  products: Product[];

  constructor(public navCtrl: NavController) 
    this.products = [];
    ...

如果你不这样做,那么它是undefined,这会导致你发布的错误。

在声明成员时也可以这样做:

export class HomePage 
  products: Product[] = [];

这将产生完全相同的 js 代码。

【讨论】:

天哪!一直都是这样......非常感谢!

以上是关于离子 2 - 打字稿 |填充接口对象数组的主要内容,如果未能解决你的问题,请参考以下文章

具有默认值的打字稿固定数组

从数组打字稿中删除对象(Angular 2)

对对象数组进行排序角打字稿

如何在打字稿/离子2中按周分组时间戳?

如何在打字稿中过滤对象数组

打字稿:按值检查对象是不是存在于数组中