Source: typedefs.js

/**
 * @callback Observer
 * @param {*} newValue
 * @param {*} oldValue
 */

/**
 * @interface Subscription
 * @property {Function} unsubscribe
 */

/**
 * @typedef {Function} SubscribeFunction
 * @param {Observer} observer
 * @returns {Subscription}
 */

/**
 * @typedef {Function} NotifyFunction
 * @description Calls all observers in sequence of subscription with new and old values.
 * @param {*} newValue
 * @param {*} oldValue
 */

/**
 * @interface Observable
 * @extends Function
 * @property {SubscribeFunction} subscribe - subscribe to the observable
 * @param {*} newValue
 * @returns {*} - current value
 */