打字稿:箭头功能 - TS2339:属性在类型“{}”上不存在

问题描述:

使用Angular时,在rxjs流内使用fat arrow functions时,我经常会收到typescript编译错误。打字稿:箭头功能 - TS2339:属性在类型“{}”上不存在

我仍然可以运行该应用程序,它确实会传输,但我想知道如何摆脱错误并理解它。

考虑:

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) 

我得到的错误:

错误的[在装载机] file.ts:XX:XX TS2339:房产 '为prop1' 不存在上键入“{}”。

ERROR in [at-loader] file.ts:xx:xx TS2339:属性'param1'在类型'{}'上不存在。

为什么它会抱怨呢?

+0

打字稿认为,从棱角分明的路线PARAMS是一个空的对象,不应该有任何属性。只要将类型转换为'any',错误应该消失 – cyrix

+0

,所以你的意思是使用“data.prop1作为任何”?不知道语法如何,如果你可以请用语法回答? – Thibs

+0

这取决于你从api获得的数据。你的api有prop1的数据吗? – Smit

试试这个:

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

我也摆脱了这样的错误:[params,data]:任何[],谢谢你 – Thibs