ich eine Modellklasse wie diese:Warum von JSON Literal nicht Casting gibt keine Funktionen umfasst
export class Task {
public name: string;
public status: string = "todo";
public completeTask(): void {
this.status = "done";
}
}
und einen Service, der eine Aufgabe ruft:
export class TaskService {
constructor(private _http: Http) {}
public getTask(): Observable<Task> {
return this._http
.get("url")
.map(res => res.json().data as Task)
}
}
Als ich dann zu nennen versuchen die completeTask
Funktion auf die Aufgabe erhalte ich die Fehlermeldung:
TypeError: task.completeTask() is not a function
ich das gleiche Ergebnis, wenn ich eine JSO werfen N literales Objekt für eine Aufgabe.
let task: Task = <Task>{ name: "Make some coffee" }
task.completeTask(); // Results in error
Mache ich etwas falsch? Wie kann ich sicherstellen, dass Funktionen enthalten sind?
Das Problem ist, dass dies nicht eine Art _cast_ ist, sondern ein Geben Sie _assertion_ ein, was keine Laufzeitunterstützung für die Typkonvertierung bedeutet. Sie sagen dem Compiler, dass 'task' vom Typ' Task' ist, aber tatsächlich ist es nur vom Typ 'Object', der von' json' geparst wurde. Dieses Problem mit JSON ist ein etwas häufiges Problem in TypeScript, für das ich gerade an einer Lösung arbeite (mehr wie "_testing_ it") mit Decorators. –