Ich schreibe Angular 1.x mit TypeScript, und ich habe einen Service (DataService), der für das Laden von Daten zuständig ist. Für ein einfaches Beispiel fragt es nach einem Knoten ab und gibt einen Knoten zurück. In der Schnittstelle:Wie umgehe ich einen Rückgabetyp mit einem Versprechen in TypeScript?
getNode(id: number): ng.IPromise<Node>;
und die Umsetzung:
getNode(id: number) {
return this.ajaxService.getNode(id)
.then((result: ng.IHttpPromiseCallbackArg<Node>) => {
return new Node(result.data.ID, result.data.Name);
});
}
Allerdings würde Ich mag einen anderen Dienst einzuführen, um diese Ergebnisse und gibt sie speichert, wenn ich bereits für sie vor abgefragt haben. So etwas wie:
getNode(id: number) {
var loadedNode = this.storageService.nodes.filter(e => (e.ID == id));
if (loadedNode.length > 0) {
return loadedNode[0];
}
return this.ajaxService.getNode(id)
.then((result: ng.IHttpPromiseCallbackArg<Node>) => {
var n = new Node(result.data.ID, result.data.Name);
this.storageService.nodes.push(n);
return n;
});
}
schlägt jedoch fehl, der Rückgabetyp, weil es erwartet ‚ng.IPromise‘ und nicht nur ‚Knoten‘. Wie kann ich 'return loadedNode [0]; in eine Art von Versprechen Rückgabetyp statt das eigentliche Objekt zurückgeben?
Ja, das ist es genau! Cool, danke! – RamblerToning
Muss ich den Rückgabetyp in der Schnittstelle ändern? Im Moment ist es getNode (ID: Nummer): ng.IPromise; Aber TypeScript scheint nicht zu erscheinen, dass es wissen sollte, dass der Rückgabetyp ein Versprechen eines Knotens ist. Das verursacht jetzt keine Probleme, aber ich habe versucht, dies auf einer anderen Methode zu verwenden getChildren (id: number): ng.IPromise ; Und TypeScript weiß nicht, die versprochene Rückgabetyp ist ein Array –
RamblerToning
Mein eigenes Problem gelöst, indem Sie den Rückgabetyp auf die Methode selbst, nicht nur auf der Schnittstelle. – RamblerToning