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[]>;