Angular 2 rxjs switchmap returns Observable
问题描述:
我正在构建打字稿角度2应用程序并使用rxjs。我在这里继例如:Angular 2 rxjs switchmap returns Observable <Object>
https://angular.io/docs/ts/latest/tutorial/toh-pt6.html#!#stq=formgroup&stp=1
全部虽然我试图以打字稿强类型我返回签名。这可能是我的问题,因为你不应该这样做。但似乎你应该能够。
假设我有键入的服务返回一个Observable>。
public search(term: string) : Observable<Array<MyModel>> { // http call }
在我的组件中,我试图听这个可观察的流并返回结果。
private search = new Subject<Search>();
results: Observable<Array<MyModel>>;
ngOnInit() {
this.results = this.search
.debounceTime(400)
.distinctUntilChanged()
.switchMap(search => {
return service.search(search.term); // returns Observable<Array<MyModel>>
});
}
这并不与消息Cannot convert type Observable<Object> to type Observable<MyModel[]>>
我不明白为什么switchmap正在恢复,而不是我喜欢的类型可观察到的编译。在给出结果之前,我是否需要重新映射它?这是与switchmap的返回签名的打字稿类型问题?
答
打字稿可能有错误的类型推断,我会尝试以下操作之一:
给你的处理程序返回类型:
.switchMap((search): Observable<Array<MyModel>> => {
return service.search(search.term); // returns Observable<Array<MyModel>>
});
,如果这也不行,“妥协”改变结果变量的类型为:
results: Observable<any>;
答
错误消息其实是对的。但是,如果没有堆栈跟踪,哪条线路导致错误还不清楚。
在ngOnInit()
方法调用:
this.results = this.search
.debounceTime(..)
...
运营商这条链总是返回Observable
这是不一样的result
属性需要(Observable<Array<MyModel>>
),因为Subject
的一般是Search
。
运营商switchmap()
总是返回Observable
。它的返回类型与可调用函数无关。
您应该能够通过简单的类型转换的结果来解决这个问题:
this.results = Observable<MyModel[]>this.search
.debounceTime(..)
...
我认为你需要的只是一个演员。 – Andrew
我曾尝试过,但无意中铸造了返回语句,而不是在属于演员的switchmap链的末尾。这是一个头脑不清的问题。谢谢! – twifosp