【发布时间】:2021-08-14 15:59:31
【问题描述】:
来自ng-bootstrap documentation的示例代码:
查看示例“维基百科搜索”,点击“>代码”并选择文件“typeahead-http.ts”。
search: OperatorFunction<string, readonly string[]> = (text$: Observable<string>) =>
text$.pipe(
debounceTime(300),
distinctUntilChanged(),
tap(() => this.searching = true),
switchMap(term =>
this._service.search(term).pipe(
tap(() => this.searchFailed = false),
catchError(() => {
this.searchFailed = true;
return of([]);
}))
),
tap(() => this.searching = false)
)
以及OperatorFunction的定义来自RxJS documentation:
interface OperatorFunction<T, R> extends UnaryFunction, Observable> {
// inherited from index/UnaryFunction
(source: T): R
}
为什么search的类型可以声明为:
OperatorFunction<string, string[]>
根据定义是:
(param: string): string[]
然后分配给带有签名的箭头函数
(param: Observable<string>): Observable<string[]>
尝试将Observable<T> 分配给T 不应该有冲突吗?我在这里想念什么?箭头函数search的实际返回类型是什么?
【问题讨论】:
-
嗨。基于这个问题,我报告了
OperatorFunction文档的问题:github.com/ReactiveX/rxjs/issues/6427 半年后,我设法找出问题的根源并创建了一个修复 PR:github.com/ReactiveX/rxjs/pull/6655 我希望它会尽快合并.
标签: angular typescript rxjs ng-bootstrap rxjs-observables