Ich habe gerade mit Angular2 begonnen und ich habe ein Problem, das ich nicht wirklich verstehen kann.Eigenschaft '' existiert nicht für Typ 'Objekt'. Observable abonnieren
Ich habe einige Mock Daten als solche erstellt:
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" }
]
};
, die dann in einem Dienst importiert und "beobachtet"
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);
}
}
Ich habe dann eine Komponente, die, im Konstruktor:
constructor(private apiService: ApiService)
{
this.apiService.getWorkflowForEditor().subscribe(WORKFLOW_DATA => {
console.log(WORKFLOW_DATA);
console.log(WORKFLOW_DATA.testDataArray);
});
}
Die erste console.log protokolliert ein Objekt des Typs Object, das die Eigenschaft testDataArray enthält.
Die zweite console.log, führt zu einem Fehler bei der Kompilierung:
Property 'testDataArray' does not exist on type 'Object'.
Während immer noch eine Reihe von Objekten, Protokollierung [Objekt, Objekt, ..], wie beabsichtigt.
Ich verstehe wirklich nicht warum, ich bin mir sicher, dass ich etwas falsch mache, ich würde eine Erklärung lieben.
Vielen Dank für jede Hilfe!
Wie Sie sehen verwenden, andere Antworten jeder empfehlen die Verwendung, ich fühle mich persönlich wie eine Schnittstelle mit dem richtigen Weg ist, wenn auch etwas umständlich für etwas so einfaches wie dieses. Sind Schnittstellen die beste Vorgehensweise mit Angular2? – 0plus1
Das Typsystem hilft Ihnen besonders, wenn die Anwendung wächst. Sie müssen keines davon verwenden, wenn Sie nicht möchten - es hat keine Auswirkungen auf das endgültige Javascript. Ich (und ich glaube die meisten anderen) mag es, weil ein intelligenter Editor Autocomplete bereitstellt und Sie davor warnt, Fehler zu machen. Wenn dies mein Code wäre, würde ich wahrscheinlich einen Typ für die Datensätze erstellen - '{key: string, parent?: String ..}' und einen für die Auflistung, die den Datensatztyp enthält - '{testDataArray: recordType []. .. oder so etwas. –