apps/rxjs.dev/content/guide/core-semantics.md
Starting in version 8, all RxJS operators that are provided in the core library MUST meet the following semantics. In the current version, version 7, all operators SHOULD meet the following semantics (as guidelines). If they do not, we need to track the issue on GitHub.
The purpose of these semantics is provide predictable behavior for the users of our library, and to ensure consistent behavior between our many different operators. It should be noted that at the time of this writing, we don't always adhere to these semantic guidelines. This document is to serve as a goalpost for upcoming changes and work as much as it is to help describe the library. This is also a "living document" and is subject to change.
Functions such as operators, constructors, and creation functions, should use named parameters in cases where there is more than 1 argument, and arguments after the first are non-obvious. The primary use case should be streamlined to work without configuration. For example, fakeFlattenMap(n => of(n)) is fine, but fakeFlattenMap(n => of(n), 1) is less readable than fakeFlattenMap(n => of(n), { maxConcurrent: 1 }). Other things, like of(1, 2, 3) are obvious enough that named parameters don't make sense.
(source: Observable<In>) => Observable<Out>.const double => map(x => x + x)), you can use that value to operate on any many observables as you like without changing any underlying state in the operator reference. (e.g. a$.pipe(double) and b$.pipe(double)).take(Infinity) or skip(0).Observable with from. For example takeUntil.Error objects MUST NOT be retained longer than necessary. This is a possible source of memory pressure.Promise references MUST NOT be retained longer than necessary. This is a possible source of memory pressure.With. (e.g. concat and concatWith).With. That is reserved for the operator counter parts of creation functions.combineThings(sourceA$, sourceB$, (a, b) => a + b), good: combineThings([sourceA$, sourceB$], (a, b) => a + b). In this case, it may be okay to provide the result selector as a second argument, rather than as a named parameter, as the use should be fairly obvious.