在 RxJS6 中缺少包含 'resultSelector' 的 `switchMap` 和 `flatMap` 重载
Missing `switchMap` and `flatMap` overloads containing 'resultSelector' in RxJS6
我对新的 RxJS 6 和兼容包感到非常困惑。目前我已经安装了这些(对于 Angular 6):
"rxjs": "^6.1.0",
"rxjs-compat": "^6.1.0",
我之前一直在使用 this signature 作为 switchMap
(在 RxJS5 中):
switchMap(
project: function: Observable,
resultSelector: function(outerValue, innerValue, outerIndex, innerIndex): any): Observable
但是当更新到版本 6 时,只有这个重载可用(没有 resultSelector
参数):
export declare function switchMap<T, R>(this: Observable<T>,
project: (value: T, index: number) => ObservableInput<R>): Observable<R>;
我正在用
导入它
import { switchMap } from 'rxjs/operators';
我怎样才能访问这个重载?
我还试图查看 \node_modules\rxjs\operators\switchMap.d.ts
以查看其中有哪些签名,但此文件的内容是:
export * from 'rxjs-compat/operators/switchMap';
所以看起来 RxJS 主包引用了兼容包?这有什么意义?兼容包是否真的修改了 RxJS - 或者我的包是否已损坏 - 所有文件也显示 1985 年的日期戳!
就像我说的,我很困惑!怎么回事?
包含结果选择器的 switchMap
的重载签名适用于安装或未安装 rxjs-compat
的 v6。只是这些重载已被弃用,因为它们将在版本 7 中删除。
在版本6中,它们仍然可以使用;弃用只是对即将发生的变化的警告。
来自rxjs/internal/operators/switchMap.d.ts
:
import { ObservableInput, OperatorFunction } from '../types';
export declare function switchMap<T, R>(project: (value: T, index: number) => ObservableInput<R>): OperatorFunction<T, R>;
/** @deprecated resultSelector is no longer supported, use inner map instead */
export declare function switchMap<T, R>(project: (value: T, index: number) => ObservableInput<R>, resultSelector: undefined): OperatorFunction<T, R>;
/** @deprecated resultSelector is no longer supported, use inner map instead */
export declare function switchMap<T, I, R>(project: (value: T, index: number) => ObservableInput<I>, resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R): OperatorFunction<T, R>;
rxjs-compat
的目的不是更改 rxjs
安装,而是 rxjs
将已删除的功能委托给 rxjs-compat
。
例如,安装 rxjs-compat
后,v5 样式的导入仍然有效。也就是说,安装 rxjs-compat
就可以了:
import { switchMap } from 'rxjs/operators/switchMap';
然而,如果没有安装 rxjs-compat
,该导入语句会导致错误。
有关详细信息,请参阅 migration guide。
我对新的 RxJS 6 和兼容包感到非常困惑。目前我已经安装了这些(对于 Angular 6):
"rxjs": "^6.1.0",
"rxjs-compat": "^6.1.0",
我之前一直在使用 this signature 作为 switchMap
(在 RxJS5 中):
switchMap(
project: function: Observable,
resultSelector: function(outerValue, innerValue, outerIndex, innerIndex): any): Observable
但是当更新到版本 6 时,只有这个重载可用(没有 resultSelector
参数):
export declare function switchMap<T, R>(this: Observable<T>,
project: (value: T, index: number) => ObservableInput<R>): Observable<R>;
我正在用
导入它import { switchMap } from 'rxjs/operators';
我怎样才能访问这个重载?
我还试图查看 \node_modules\rxjs\operators\switchMap.d.ts
以查看其中有哪些签名,但此文件的内容是:
export * from 'rxjs-compat/operators/switchMap';
所以看起来 RxJS 主包引用了兼容包?这有什么意义?兼容包是否真的修改了 RxJS - 或者我的包是否已损坏 - 所有文件也显示 1985 年的日期戳!
就像我说的,我很困惑!怎么回事?
包含结果选择器的 switchMap
的重载签名适用于安装或未安装 rxjs-compat
的 v6。只是这些重载已被弃用,因为它们将在版本 7 中删除。
在版本6中,它们仍然可以使用;弃用只是对即将发生的变化的警告。
来自rxjs/internal/operators/switchMap.d.ts
:
import { ObservableInput, OperatorFunction } from '../types';
export declare function switchMap<T, R>(project: (value: T, index: number) => ObservableInput<R>): OperatorFunction<T, R>;
/** @deprecated resultSelector is no longer supported, use inner map instead */
export declare function switchMap<T, R>(project: (value: T, index: number) => ObservableInput<R>, resultSelector: undefined): OperatorFunction<T, R>;
/** @deprecated resultSelector is no longer supported, use inner map instead */
export declare function switchMap<T, I, R>(project: (value: T, index: number) => ObservableInput<I>, resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R): OperatorFunction<T, R>;
rxjs-compat
的目的不是更改 rxjs
安装,而是 rxjs
将已删除的功能委托给 rxjs-compat
。
例如,安装 rxjs-compat
后,v5 样式的导入仍然有效。也就是说,安装 rxjs-compat
就可以了:
import { switchMap } from 'rxjs/operators/switchMap';
然而,如果没有安装 rxjs-compat
,该导入语句会导致错误。
有关详细信息,请参阅 migration guide。