2017-03-03 5 views
0

Bei Verwendung von Angular bekomme ich oft typescript Kompilierfehler, wenn fat arrow functions in einem rxjs Stream verwendet wird.Typescript: Arrow-Funktion - TS2339: Eigenschaft existiert nicht beim Typ '{}'

Ich kann immer noch die App laufen und es tut transpile, aber ich würde gerne wissen, wie man den Fehler loswerden und verstehen.

Gegeben:

this.data$ = this.route.params 
     .switchMap(params => 
      Observable.forkJoin([ 
       Observable.of(params), 
       this.http.get('/api', { param1: params.param1, param2: params.param2 }) 
     ]) 
     //**Errors from this part below** 
     .map(([params, data]) => data.prop1 + ' - ' + params.param1) 

bekomme ich die Fehler:

ERROR in [at-loader] file.ts: xx: xx TS2339: Das Objekt 'PROP1' existiert nicht auf Art '{}'.

Fehler in [at-loader] file.ts: xx: xx TS2339: Die Eigenschaft 'param1' existiert nicht für den Typ '{}'.

Warum beschwert es sich darüber?

+0

Typoskript denkt, dass die Route params von Winkel sind ein leeres Objekt und sollte keine Attribute haben. JustCast Params zu 'any' und die Fehler sollten – cyrix

+0

sein, so dass Sie" data.prop1 as any "verwenden? Nicht sicher, wie die Syntax aussehen würde, wenn Sie bitte mit der Syntax antworten können? – Thibs

+0

Das hängt von den Daten ab, die du von deiner API bekommst. Hat deine API Daten mit prop1? – Smit

Antwort

1

Versuchen Sie dieses:

this.data$ = this.route.params 
    .switchMap((params: any) => 
     Observable.forkJoin([ 
      Observable.of(params), 
      this.http.get('/api', { param1: params.param1, param2: params.param2 }) 
    ]) 
    //**Errors from this part below** 
    .map(([params, data]: [any, any]) => data.prop1 + ' - ' + params.param1) 
+0

Ich habe auch Fehler wie folgt los: [params, Daten]: any [], danke – Thibs

Verwandte Themen