为什么 (Observable<T>) => Observable<R> 解析为 OperatorFunction<T, R>



ng引导程序文档中的示例代码:

参见示例";维基百科搜索";,点击"<>代码";并选择文件";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)
)

以及RxJS文档中OperatorFunction的定义:

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定义为(https://github.com/ReactiveX/rxjs/blob/7.1.0/src/internal/types.ts#L23):

export interface OperatorFunction<T, R> extends UnaryFunction<Observable<T>, Observable<R>> {}

则CCD_ 11被声明为(https://github.com/ReactiveX/rxjs/blob/7.1.0/src/internal/types.ts#L19-L21(:

export interface UnaryFunction<T, R> {
(source: T): R;
}

这意味着search被声明为:

(source: Observable<string>): Observable<string[]>;

相关内容

  • 没有找到相关文章

最新更新