我刚刚开始使用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 []”的集合。 ..'或者类似的东西。 –