Wie verwenden von fetch in Typoskript
Ich bin mit Fenster.Holen in Maschinenschrift, aber ich kann nicht werfen die Antwort direkt an meine custom-Typ:
Ich bin hacking mein Weg, um dieses durch Gießen das Versprechen Folge zu einer intermediate - 'any' - variable.
Was wäre die richtige Methode, dies zu tun?
import { Actor } from './models/actor';
fetch(`http://swapi.co/api/people/1/`)
.then(res => res.json())
.then(res => {
//this is not allowed
//let a:Actor = <Actor>res;
//I use an intermediate variable a to get around this...
let a:any = res;
let b:Actor = <Actor>a;
})
- Uh,
json
enthält plain-Objekte, also wie konnte Sie es umwandeln, um eine Instanz? Müssten Sie so etwas wieActor.from
erstellt, dienew Actor
mit den Daten. - Warum ist es "nicht erlaubt"? Welche Fehler haben Sie, wenn Sie es versuchen?
- und die Definitionen sind Sie da fetch ist nicht in Maschinenschrift, libs noch
- Ah, tut mir Leid, ich habe gerade entdeckt den Fehler: ich muss sagen, dass res-Typ ist alle. .dann((res:any) => { let b = <Schauspieler>res}). Dann ist es eigentlich zulässig ist. @MeirionHughes ich bin mit dem definitelyTyped whatwg-holst.d....ts-Dateien zu machen Typoskript erkennen zu Holen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einige Beispiele Folgen, die von der grundlegenden durch hinzufügen von Transformationen nach der Anfrage und/oder Fehlerbehandlung:
Basic:
Daten-Transformationen:
Oft müssen Sie möglicherweise einige Optimierungen, um die Daten, bevor Ihr an die Verbraucher, zum Beispiel dem Auspacken einer top-level-Daten-Attribut. Das ist straight forward:
Fehlerbehandlung:
Ich würde argumentieren, dass Sie sollten nicht direkt Fehler fangen direkt mit diesem service, statt, nur, dass es zu Blasen -, aber wenn Sie müssen, können Sie Folgendes tun:
Bearbeiten
Es hat einige änderungen seit dem verfassen dieser Antwort eine Weile her. Wie bereits erwähnt in den Kommentaren,
response.json<T>
ist nicht mehr gültig. Nicht sicher, konnte es nicht finden, wo es entfernt wurde.Zur späteren releases können Sie tun:
<T>
geben, aber der Inhalt, der heruntergeladen wird. Aber angeblich kann man sagen, dass die Versprechen der Klasse? (Ist ein Versprechen, das eine Klasse? eine Funktion hat? ein Objekt?)if (!response.ok) {
mit was auch immer überprüfen, die Sie brauchen@types/node-fetch
noch in der aktuellen Typoskriptlib.dom.d.ts
-- diese Antwort ist nicht möglich jetzt. Anstatt also, ich denke, wir haben zu tunreturn response.json() as Promise<T>;
?Wenn man einen Blick auf @Typen/node-fetch sehen Sie die Körper-definition
Das bedeutet, dass Sie könnten, dass Generika verwendet werden, um zu erreichen, was Sie wollen. Ich habe nicht testen Sie diesen code, aber es würde in etwa so Aussehen:
Expected 0 type arguments, but got 1
, aber vielleicht liegt es auch daran, dass ich nicht verwendennode-fetch
. Die Typen, die für den einheitlichen Holen sind wohl Verschieden?json()
. wenn Sie gab vor, es nicht mehr.