Skip to main content


Alternative: share$$$

Inlined: shareObservable, share$$


function shareObservablePipe<GValue>(
options?: IShareObservableOptions<GValue>,
): IObservablePipe<GValue, GValue>


This ObservablePipe uses the function sourceObservablePipe with a IMulticastSource.

It counts the number of subscriptions and subscribes (only once) to the original Observable if the number of subscriptions is equal to 1. The received value and all the following are then emitted to all the subscribers.

If the number of subscriptions is equal to 0, it unsubscribes from the Observable.

In one line: this pipe subscribes to the original observable on the first subscription, and unsubscribes of it when no one remains, while sharing all the received values.

This is partially equivalent to the multicast and refCount operators, but it is more generic.

See sourceObservablePipe and createMulticastSource.


You will probably never user directly this ObservablePipe, instead you may use: shareObservablePipeWithMulticastReplaySource or shareObservablePipeWithMulticastReplayLastSource.


Sharing the same Observable

const subscribe = pipe$$(interval(1000), [
scan$$$<void, number>(count => (count + 1), 0),

subscribe((value: number) => {
console.log('value - A:', value);

subscribe((value: number) => {
console.log('value - B:', value);


value - A: 0
value - B: 0
value - A: 1
value - B: 1