Observable<Any> 触发 TSLint '属性不存在'

Posted

技术标签:

【中文标题】Observable<Any> 触发 TSLint \'属性不存在\'【英文标题】:Observable<Any> triggers TSLint 'property does not exist'Observable<Any> 触发 TSLint '属性不存在' 【发布时间】:2016-04-01 02:15:12 【问题描述】:

我这里有这段代码:

this._auth.getToken().flatMap(token => 
  return this._http.post("/authenticate");
).flatMap(res => 
  let headers = new Headers();
  headers.append("Content-Type", "application/json");
  headers.append("Authorization", res.json().Token);
  return this._http.get(this.endpoints[endpoint], headers: headers);
);

http.gethttp.post 返回一个 Observable 包含一个 .json 方法

然而 flatMap 返回的 Observable 不包含 .json 方法。

它工作正常,但 TSlint 抱怨:

类型“”上不存在属性“json”。在第 32 行第 49 行

我做错了吗?这是预期的吗?这不是什么大问题,但可能是代码中更大问题的征兆。

【问题讨论】:

试试.flatMap((res: Response) =&gt; ...) 有效!谢谢你。您为什么不将其发布为答案? 我按照您的建议将其发布为答案。我很好奇你用的是哪个版本(angular2和TS),你用的是哪一个? "angular2": "2.0.0-beta.0" "typescript": "^1.7.3" "rxjs": "5.0.0-beta.0" "tslint": "^ 3.1.1" 【参考方案1】:

要解决此问题,您应该添加 Response 作为返回值的类型

flatMap((res: Response) => 
  let headers = new Headers();
  headers.append("Content-Type", "application/json");
  headers.append("Authorization", res.json().Token);
  return this._http.get(this.endpoints[endpoint], headers: headers);
);

注意

这个问题已经解决了,检查一下comment,所以你可能不是最新版本。我使用 beta.0 对其进行了测试,即使不添加 Response 作为类型,我也无法重现此消息。

参考

RxJS #635 Angular #5597

【讨论】:

以上是关于Observable<Any> 触发 TSLint '属性不存在'的主要内容,如果未能解决你的问题,请参考以下文章

类型 '() => Observable<any>' 不可分配给类型 '() => Observable<any>'

类型 'Observable<any>' 不可分配给类型 'Observable<T>'

rxswift:如何获取 Observable<Any> 导致 Observable<[Category]> 的组合?

类型 '() => Observable<any>' 上不存在属性 'subscribe'

“MonoTypeOperatorFunction<any>”类型的参数不可分配给“UnaryFunction<Obs​​ervable<any>, Observable

如何从 Observable<Array<any>> 中删除特定元素