2

我对新的 RxJS 6 和兼容性包感到非常困惑。目前我已经安装了这些(对于 Angular 6):

"rxjs": "^6.1.0",
"rxjs-compat": "^6.1.0",

我以前一直在使用这个签名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 日期戳!

就像我说的我很困惑!这是怎么回事?

4

1 回答 1

4

包含结果选择器的重载签名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安装,该 import 语句会产生错误。

有关详细信息,请参阅迁移指南

于 2018-05-05T00:32:48.107 回答