import { switchMap } from './switchMap'; import { ObservableInput, OperatorFunction, ObservedValueOf } from '../types'; import { isFunction } from '../util/isFunction'; /** @deprecated Will be removed in v9. Use {@link mergeMap} instead: `mergeMap(() => result)` */ export function switchMapTo>(observable: O): OperatorFunction>; /** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */ export function switchMapTo>( observable: O, resultSelector: undefined ): OperatorFunction>; /** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */ export function switchMapTo>( observable: O, resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R ): OperatorFunction; /** * Projects each source value to the same Observable which is flattened multiple * times with {@link switchMap} in the output Observable. * * It's like {@link switchMap}, but maps each value * always to the same inner Observable. * * ![](switchMapTo.png) * * Maps each source value to the given Observable `innerObservable` regardless * of the source value, and then flattens those resulting Observables into one * single Observable, which is the output Observable. The output Observables * emits values only from the most recently emitted instance of * `innerObservable`. * * ## Example * * Restart an interval Observable on every click event * * ```ts * import { fromEvent, switchMapTo, interval } from 'rxjs'; * * const clicks = fromEvent(document, 'click'); * const result = clicks.pipe(switchMapTo(interval(1000))); * result.subscribe(x => console.log(x)); * ``` * * @see {@link concatMapTo} * @see {@link switchAll} * @see {@link switchMap} * @see {@link mergeMapTo} * * @param {ObservableInput} innerObservable An Observable to replace each value from * the source Observable. * @return A function that returns an Observable that emits items from the * given `innerObservable` (and optionally transformed through the deprecated * `resultSelector`) every time a value is emitted on the source Observable, * and taking only the values from the most recently projected inner * Observable. * @deprecated Will be removed in v9. Use {@link mergeMap} instead: `mergeMap(() => result)` */ export function switchMapTo>( innerObservable: O, resultSelector?: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R ): OperatorFunction | R> { return isFunction(resultSelector) ? switchMap(() => innerObservable, resultSelector) : switchMap(() => innerObservable); }