What does $ sign at the end of function name indicate?

Here is the code I'm reviewing...

import { Observable } from 'rxjs/Rx';
// reducer
import { playerRegister, PlayerState } from './player';
export function getPlayer$ (state$: Observable<MyAppState>): Observable<PlayerState> {
  return state$.select(state => state.player);
};

Solution 1:

Syntactically, the dollar ($) character has no special meaning in JavaScript identifiers.

It is, however, sometimes used by convention to indicate that a variable holds an Observable or that a function will return an Observable.

Solution 2:

This is a code convention named Finnish Notation, apparently due to the origin of the developer that is attributed for first using it. It's used to indicate the Observable type of a variable or function.

The idea is that an Observable usually represents a stream of multiple Values and a pluralized variable / function name would indicate this. To not be confused with array variables (which are usually also pluralized), the $ character is used instead of the s. When reading the variable, you'd read the $ as an s.

Example

When naming an array, you'll most likely use the proper plural form of a single element's name, as in:

const pets = ['cat', 'dog', 'turtle']

While, if you had an observable that emitted those three values, you'd use:

const pet$ = from(['cat', 'dog', 'turtle']) // read: pets

It's up to you and your team whether you want to use it. I guess there is no explicit consensus as of now, so you can have a long and meaningful argument about it ;-). There are already tslint rules available that allow you to enforce your decision.

Solution 3:

I'm not sure if it's used more widely than within the RxJS community, but within this community it's commonly used to indicate that a variable is a stream (i.e. an Observable) or that a function returns such a stream.

Solution 4:

For a function it means it returns an observable.

For a variable it means it is an observable.

This notation is widely used in Angular projects and I find it very useful to quickly see that it is an observable and not the actual value.