/// /// module Rx { export interface ObservableStatic { /** * Uses selector to determine which source in sources to use. * @param {Function} selector The function which extracts the value for to test in a case statement. * @param {Array} sources A object which has keys which correspond to the case statement labels. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the sources are not matched. If this is not provided, it defaults to Rx.Observabe.empty with the specified scheduler. * * @returns {Observable} An observable sequence which is determined by a case statement. */ case(selector: () => string, sources: { [key: string]: ObservableOrPromise; }, schedulerOrElseSource?: IScheduler | ObservableOrPromise): Observable; /** * Uses selector to determine which source in sources to use. * @param {Function} selector The function which extracts the value for to test in a case statement. * @param {Array} sources A object which has keys which correspond to the case statement labels. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the sources are not matched. If this is not provided, it defaults to Rx.Observabe.empty with the specified scheduler. * * @returns {Observable} An observable sequence which is determined by a case statement. */ case(selector: () => number, sources: { [key: number]: ObservableOrPromise; }, schedulerOrElseSource?: IScheduler | ObservableOrPromise): Observable; } } (function() { var o: Rx.Observable; var p: Rx.Promise; var e: Rx.Observable; var on: Rx.Observable; var pn: Rx.Promise; var en: Rx.Observable; var so : { [key: string]: Rx.ObservableOrPromise; } = {}; so['abc'] = p; so['def'] = e; so['xyz'] = o; var no : { [key: number]: Rx.ObservableOrPromise; } = {} no[1] = pn; no[2] = en; no[3] = on; o = Rx.Observable.case(() => 'abc', so) o = Rx.Observable.case(() => 'abc', so, e) o = Rx.Observable.case(() => 'abc', so, Rx.Scheduler.async); on = Rx.Observable.case(() => 1, no) on = Rx.Observable.case(() => 2, no, en); on = Rx.Observable.case(() => 3, no, Rx.Scheduler.async); });