缺少`switchMap`和`flatMap`重载在RxJS6中包含'resultSelector'

时间:2018-05-05 00:17:35

标签: rxjs 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年日期戳!

像我说的那样我很困惑!发生了什么事?

1 个答案:

答案 0 :(得分:4)

包含结果选择器的switchMap的重载签名在v6中可用,安装或不安装rxjs-compat。只是这些重载已被弃用,因为它们将在版本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