diff --git a/src/index.ts b/src/index.ts index f2c7070..83367e9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -93,10 +93,10 @@ function internalizeProducer(producer: Producer & Partial implements Subscription { - constructor(private _stream: Stream, private _listener: Listener) {} + constructor(private _stream: Stream, private _listener: InternalListener) {} unsubscribe(): void { - this._stream.removeListener(this._listener); + this._stream._remove(this._listener); } } @@ -1225,9 +1225,9 @@ export class Stream implements InternalListener { * @param {Listener} listener * @returns {Subscription} */ - subscribe(listener: Listener): Subscription { + subscribe(listener: Partial>): Subscription { this.addListener(listener); - return new StreamSub(this, listener); + return new StreamSub(this, listener as InternalListener); } /** diff --git a/tests/stream.ts b/tests/stream.ts index 72e3312..a755b81 100644 --- a/tests/stream.ts +++ b/tests/stream.ts @@ -413,5 +413,20 @@ describe('Stream', () => { done(); }); + + it('should accept a partial listener', (done: any) => { + const stream = xs.empty(); + const noop = (): void => void 0; + const listener = { + next: noop, + }; + + const subscription = stream.subscribe(listener); + + assert.equal(typeof subscription, 'object'); + assert.equal(typeof subscription.unsubscribe, 'function'); + + done(); + }); }); });