2016-10-17 9 views
0

この質問をする前に私は本当に宿題をしましたが、あなたの中には馬鹿だと思う人もいますが、Typescriptにはまだまだ新しく、私はこれで全面的に苦労しています。イオン2 - タイプスクリプト|

私はインターフェイスを持っている:

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

私はタイプの製品の配列を作成し、ランダムな値とその配列を埋めるためにしようとしています。さらに、ここで自分自身を説明するための

が、私はそれをやっている方法は次のとおりです。私はこれを実行すると

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(…) 

してくださいあなたは正しい方向に私を導くことができますか?私は間違って何をしているのですか?それをどうやって修正できますか?

ありがとうございます。

あなたはクラスのメンバ定義typescriptですで
+0

可能な複製:http://stackoverflow.com/questions/10673237/uncaught-typeerror-cannot-set-property-0-of-undefined – styfle

答えて

6

:それは本当にjsのコンパイルされたコードでそのメンバーを作成しません

class A { 
    member: string[]; 
} 

:あなたはそのメンバーをintializeする必要が

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

を:

export class HomePage { 
    products: Product[]; 

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

あなたがそれをしない場合はundefinedです主張する。メンバーを宣言するとき

またそれを行うことができます。同じ正確なJSコードになります

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

+0

Oh my!それは全体の時間だった... ありがとうたくさん! – Lambasoft