Отсутствуют перегрузки `switchMap` и` flatMap`, содержащие 'resultSelector' в RxJS6 - PullRequest
0 голосов
/ 05 мая 2018

Я полностью сбит с толку новым 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 года!

Как я и сказал, я очень смущен! Что происходит?

1 Ответ

0 голосов
/ 05 мая 2018

Сигнатуры перегрузки для 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 этот оператор импорта приведет к ошибке.

Подробнее см. В руководстве по миграции .

...