我剛剛開始使用Angular2,我遇到了一個我無法理解的問題。屬性''在類型'對象'上不存在。 Observable訂閱
我有這樣創建了一些模擬數據:
export const WORKFLOW_DATA: Object =
{
"testDataArray" : [
{ key: "1", name: "Don Meow", source: "cat1.png" },
{ key: "2", parent: "1", name: "Roquefort", source: "cat2.png" },
{ key: "3", parent: "1", name: "Toulouse", source: "cat3.png" },
{ key: "4", parent: "3", name: "Peppo", source: "cat4.png" },
{ key: "5", parent: "3", name: "Alonzo", source: "cat5.png" },
{ key: "6", parent: "2", name: "Berlioz", source: "cat6.png" }
]
};
,然後將其在一個服務導入和「觀察到的」
import { Injectable } from '@angular/core';
import { WORKFLOW_DATA } from './../mock-data/workflow'
import {Observable} from "rxjs";
@Injectable()
export class ApiService {
constructor() { }
getWorkflowForEditor(): Observable<Object>
{
return Observable.of(WORKFLOW_DATA);
}
}
我然後有一個部件,其在構造:
constructor(private apiService: ApiService)
{
this.apiService.getWorkflowForEditor().subscribe(WORKFLOW_DATA => {
console.log(WORKFLOW_DATA);
console.log(WORKFLOW_DATA.testDataArray);
});
}
第一個console.log記錄一個Object類型的Object,它包含testDataArray屬性。
第二的console.log,導致在編譯時的誤差:
Property 'testDataArray' does not exist on type 'Object'.
雖然仍在記錄對象的數組[對象,對象,..]如預期。
我真的不明白爲什麼,我確定我做錯了什麼,我很樂意解釋。
謝謝你的幫助!
正如你所看到的,其他的答案建議使用任何,我個人感覺使用界面是正確的方法,儘管對於像這樣簡單的事情有點冗長。界面是Angular2的最佳實踐嗎? – 0plus1
這個類型系統可以幫助你,特別是隨着應用程序的增長。如果你不想使用它,你不需要使用它 - 它對最終的javascript沒有任何影響。我(我認爲大多數人)喜歡它,因爲智能編輯器提供自動完成功能,並警告你犯錯誤。如果這是我的代碼,我可能會爲記錄創建一個類型 - 「{key:string,parent?:string ..}」,另一個用於包含記錄類型「{testDataArray:recordType []」的集合。 ..'或者類似的東西。 –