Warum gibt der httpclient in angular 4.3 Object zurück?

9

Die neue HttpClient-Klasse in Angular 4.3 scheint standardmäßig Objekt anstatt any zurückzugeben.

Gibt es dafür einen besonderen Grund, wenn die Typoskript-Dokumentation besagt:

  

Verwenden Sie niemals die Typen Number, String, Boolean oder Object. Diese   Typen beziehen sich auf nicht primitive Boxed-Objekte, die fast nie verwendet werden   entsprechend in JavaScript-Code.

     

Ссылка

Ich bin mir bewusst, dass ich meinen eigenen Rückgabetyp verwenden kann:
this.httpService.get<any>('/api1').subscribe(Data => {console.log(Data.Value1)});

Es scheint einfacher zu sein, es zum Standard zu machen. Ich bin mir bewusst, dass ich einen Typ für die Daten erstellen kann, die es zurückgibt, aber es scheint, als würde es die Flexibilität erhöhen.

Ich wollte den HttpClient erweitern und die Methoden überschreiben, um irgendwelche zurückzugeben, aber bevor ich das tue, wollte ich sehen, ob etwas fehlte.

    
Lambo Jayapalan 16.07.2017, 22:51
quelle

2 Antworten

3

Das Schlüsselwort in nicht primitiven eingerahmten Objekten, die in JavaScript-Code fast nie richtig verwendet werden, ist fast .

Wie in diese Antwort erläutert, kann JSON-Dokument alles andere als undefined und Symbol sein, dies macht Object geeigneterer Typ als any .

Das Verhalten von any gegenüber Object wird in dem Handbuch erläutert :

  

Der any-Typ ist eine leistungsstarke Methode, um mit vorhandenem JavaScript zu arbeiten, sodass Sie die Typprüfung während der Kompilierung schrittweise aktivieren und deaktivieren können. Sie könnten erwarten, dass Object eine ähnliche Rolle spielt wie in anderen Sprachen. Aber Variablen vom Typ Object erlauben es nur, ihnen irgendeinen Wert zuzuweisen - Sie können für sie keine beliebigen Methoden aufrufen, auch keine, die tatsächlich existieren.

any response type erlaubt es, beliebige Methoden aufzurufen, was kein wünschenswertes Verhalten ist, einschließlich der, die nicht existieren.

Ein geeigneter Typ für die JSON-Antwort ist

%Vor%

Und ein präziser (wie hier gezeigt hier , mit dem Zusatz von null ) ist:

%Vor%

Das ist wahrscheinlich so, wie es in HttpClient gemacht werden sollte. Während Object ist weniger genau, aber immer noch anwendbar Typ als any .

    
estus 17.07.2017, 03:42
quelle
3

Haftungsausschluss: Es gibt viele Überladungen mit allen Arten von Rückgabetypen - daher lese ich vielleicht mehr darüber, als ich sollte.

Ich habe nichts spezielles gesehen, um dies zu bestätigen, aber ich schätze, dass Object den Typ genauer beschreibt, da es strenger ist als any und "nativ" mit generischen Javascript-Objektmethoden assoziiert ist (siehe Ссылка ). Zumindest in meiner bescheidenen Einschätzung scheint dies der Änderung zu entsprechen, dass der Antworttext (wie angenommen JSON) standardmäßig zurückgegeben wird.

Sehen Sie sich diese Frage für einen Weg detaillierteren Vergleich von Object vs any an: TypeScript any vs Objekt

Es gibt auch einen tollen Artikel über HttpClient von Alligator.io hier: Ссылка

TLDR:

  

... Ein Hauptunterschied besteht darin, dass standardmäßig eine JSON-Antwort erwartet wird, sodass die JSON-Antwort nicht mehr explizit analysiert werden muss.

     

[Text dazwischen wird aus Platzgründen entfernt]

     

Standardmäßig gibt der HttpClient den Hauptteil der Antwort zurück.

     

[Mehr Text entfernt]

     

Wenn Sie etwas anderes als JSON als Antwort erwarten, können Sie den erwarteten Antworttyp mit einem Objekt mit dem responseType-Schlüssel angeben ...

Ich würde wirklich empfehlen, den ganzen Artikel zu lesen.

    
Steveland83 16.07.2017 23:43
quelle

Tags und Links