diff --git a/spec/operators/debounce-spec.ts b/spec/operators/debounce-spec.ts index 8616e786b1..8cbfa37bf7 100644 --- a/spec/operators/debounce-spec.ts +++ b/spec/operators/debounce-spec.ts @@ -2,6 +2,7 @@ import { expect } from 'chai'; import * as Rx from '../../src/Rx'; import marbleTestingSignature = require('../helpers/marble-testing'); // tslint:disable-line:no-require-imports +declare const type; declare const { asDiagram }; declare const hot: typeof marbleTestingSignature.hot; declare const cold: typeof marbleTestingSignature.cold; @@ -428,4 +429,20 @@ describe('Observable.prototype.debounce', () => { expect(results).to.deep.equal([1, 2]); }); + + type('should support selectors of the same type', () => { + /* tslint:disable:no-unused-variable */ + let o: Rx.Observable; + let s: Rx.Observable; + let r: Rx.Observable = o.debounce((n) => s); + /* tslint:enable:no-unused-variable */ + }); + + type('should support selectors of a different type', () => { + /* tslint:disable:no-unused-variable */ + let o: Rx.Observable; + let s: Rx.Observable; + let r: Rx.Observable = o.debounce((n) => s); + /* tslint:enable:no-unused-variable */ + }); }); diff --git a/src/internal/operators/debounce.ts b/src/internal/operators/debounce.ts index 8477535c0b..e728ecfb6d 100644 --- a/src/internal/operators/debounce.ts +++ b/src/internal/operators/debounce.ts @@ -50,12 +50,12 @@ import { MonoTypeOperatorFunction } from '../../internal/types'; * @method debounce * @owner Observable */ -export function debounce(durationSelector: (value: T) => SubscribableOrPromise): MonoTypeOperatorFunction { +export function debounce(durationSelector: (value: T) => SubscribableOrPromise): MonoTypeOperatorFunction { return (source: Observable) => source.lift(new DebounceOperator(durationSelector)); } class DebounceOperator implements Operator { - constructor(private durationSelector: (value: T) => SubscribableOrPromise) { + constructor(private durationSelector: (value: T) => SubscribableOrPromise) { } call(subscriber: Subscriber, source: any): TeardownLogic { @@ -74,7 +74,7 @@ class DebounceSubscriber extends OuterSubscriber { private durationSubscription: Subscription = null; constructor(destination: Subscriber, - private durationSelector: (value: T) => SubscribableOrPromise) { + private durationSelector: (value: T) => SubscribableOrPromise) { super(destination); } @@ -95,7 +95,7 @@ class DebounceSubscriber extends OuterSubscriber { this.destination.complete(); } - private _tryNext(value: T, duration: SubscribableOrPromise): void { + private _tryNext(value: T, duration: SubscribableOrPromise): void { let subscription = this.durationSubscription; this.value = value; this.hasValue = true; diff --git a/src/internal/patching/operator/debounce.ts b/src/internal/patching/operator/debounce.ts index f3ec5d3d6e..f7397c1d19 100644 --- a/src/internal/patching/operator/debounce.ts +++ b/src/internal/patching/operator/debounce.ts @@ -44,6 +44,6 @@ import { debounce as higherOrder } from '../../operators/debounce'; * @method debounce * @owner Observable */ -export function debounce(this: Observable, durationSelector: (value: T) => SubscribableOrPromise): Observable { +export function debounce(this: Observable, durationSelector: (value: T) => SubscribableOrPromise): Observable { return higherOrder(durationSelector)(this); }