2017-01-16 8 views
0

関数を呼び出そうとするとエラーが発生します。 someClassのオブジェクトを1つだけ作成し、greet関数を呼び出すとうまく動作します。Typescriptコール関数TypeError:this.array [i] .greetは関数ではありません

(一部の配列は型工assの配列です)が機能しない:

for (let i = 0; i < this.someArray.length; i++) { 

     this.someArray[i].greet(); 
} 

作品:

let oneInstance: someClass = new someClass; 
oneInstance.id = 'abc'; 
console.log(oneInstance.greet()); 

SomeArrayは私のクラス工assの配列です:

export class someClass implements ISomeClass { 

    id: string; 

    public greet() { 
     return "Hello, " + this.id; 
    } 
} 
+0

'someArray'を宣言して設定しますか? – Doug

+0

someArray:someClass []; 保存が早すぎます。次に、HTTPサービスを呼び出して、データをsomeArrayに取り込みます。リストを反復する関数を呼び出します。私がインスタンスconsole.log(this.someArray [i] .id)のために行うなら、私はそれが役に立つなら値を得る。 – Bryce

+0

サービスからデータを入力するコードを表示できますか? –

答えて

1

マイデータの配列を作成するときに、クラスのインスタンスを作成せず、オブジェクトwhを割り当てる同じ形状を共有しています。

たとえば、あなたがやっている:

json.resultsがある
this.someArray = json.results; 

それはあなたのIDを持つオブジェクトを取得しますが、彼らはあなたのためにクラスメソッドを持っていないこう
[{ 
    id: "id1" 
} ... { 
    id: "idn" 
}] 

をクラスをインスタンス化していない場合は、次のようにする必要があります。

this.someArray = json.results.map(item => Object.assign(new someClass(), item)); 
+0

これは正しい理由です(ただし、その実装は私のためには機能しませんでした)。オブジェクトはオブジェクト型ですが、クラスの型ではありません。私はその型のオブジェクトとして初期化し、フィールドに値を設定します。そして今、私の関数はうまくいきます!大変感謝しています。 – Bryce

関連する問題