import { Subscription } from './Subscription'; import { CompleteCallBack, ErrorCallBack, ObserverCallBack, Subscribable } from './Subscribable'; import { Observer } from './Observer'; import { Subscriber } from './Subscriber'; export type OperatorFunction = (source: Observable) => Observable; export class Observable implements Subscribable { private _producerFunction: ((subscriber: Subscriber) => Subscription | (() => void) | void) | undefined; constructor(producerFunction?: (subscriber: Subscriber) => Subscription | (() => void) | void) { this._producerFunction = producerFunction; } subscribe(d: ObserverCallBack): Subscription; subscribe(d: ObserverCallBack, e?: ErrorCallBack, c?: CompleteCallBack): Subscription; subscribe(observer: Partial>): Subscription; subscribe(observer: Partial> | ObserverCallBack, e?: ErrorCallBack, c?: CompleteCallBack): Subscription { /* const observer = observerOrNext; const partialObserver: Partial> = typeof observer === 'function' ? { next: observer, error: error, complete: complete } : { next: observer.next, error: observer.error, complete: observer.complete }; */ const partialObserver: Partial> = { next: typeof observer === 'object' ? observer.next : observer, error: typeof observer === 'object' ? observer.error : e, complete: typeof observer === 'object' ? observer.complete : c }; // Create a new internal subscriber for this specific subscription const internalSubscriber = new Subscriber({ next: (data: T) => { partialObserver.next?.(data); }, error: (e: E) => { partialObserver.error?.(e); }, complete: () => { partialObserver.complete?.(); } }); if (this._producerFunction) { const teardownLogic = this._producerFunction(internalSubscriber); if (teardownLogic) { internalSubscriber.add(teardownLogic); } } return internalSubscriber; } // complete 되야지만 마지막 처리된다! toPromise(): Promise { return new Promise((resolve, reject) => { let lastValue: T | undefined; let subscription: Subscription; subscription = this.subscribe({ next: (value: T) => { lastValue = value; }, error: (err: E) => { reject(err); subscription.unsubscribe(); }, complete: () => { resolve(lastValue); subscription.unsubscribe(); } }); }); } pipe(): Observable; pipe(op1: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction): Observable; pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction, op37: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction, op37: OperatorFunction, op38: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction, op37: OperatorFunction, op38: OperatorFunction, op39: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction, op37: OperatorFunction, op38: OperatorFunction, op39: OperatorFunction, op40: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction, op37: OperatorFunction, op38: OperatorFunction, op39: OperatorFunction, op40: OperatorFunction, op41: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction, op37: OperatorFunction, op38: OperatorFunction, op39: OperatorFunction, op40: OperatorFunction, op41: OperatorFunction, op42: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction, op37: OperatorFunction, op38: OperatorFunction, op39: OperatorFunction, op40: OperatorFunction, op41: OperatorFunction, op42: OperatorFunction, op43: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction, op37: OperatorFunction, op38: OperatorFunction, op39: OperatorFunction, op40: OperatorFunction, op41: OperatorFunction, op42: OperatorFunction, op43: OperatorFunction, op44: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction, op37: OperatorFunction, op38: OperatorFunction, op39: OperatorFunction, op40: OperatorFunction, op41: OperatorFunction, op42: OperatorFunction, op43: OperatorFunction, op44: OperatorFunction, op45: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction, op37: OperatorFunction, op38: OperatorFunction, op39: OperatorFunction, op40: OperatorFunction, op41: OperatorFunction, op42: OperatorFunction, op43: OperatorFunction, op44: OperatorFunction, op45: OperatorFunction, op46: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction, op37: OperatorFunction, op38: OperatorFunction, op39: OperatorFunction, op40: OperatorFunction, op41: OperatorFunction, op42: OperatorFunction, op43: OperatorFunction, op44: OperatorFunction, op45: OperatorFunction, op46: OperatorFunction, op47: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction, op37: OperatorFunction, op38: OperatorFunction, op39: OperatorFunction, op40: OperatorFunction, op41: OperatorFunction, op42: OperatorFunction, op43: OperatorFunction, op44: OperatorFunction, op45: OperatorFunction, op46: OperatorFunction, op47: OperatorFunction, op48: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction, op37: OperatorFunction, op38: OperatorFunction, op39: OperatorFunction, op40: OperatorFunction, op41: OperatorFunction, op42: OperatorFunction, op43: OperatorFunction, op44: OperatorFunction, op45: OperatorFunction, op46: OperatorFunction, op47: OperatorFunction, op48: OperatorFunction, op49: OperatorFunction ): Observable; pipe( op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction, op4: OperatorFunction, op5: OperatorFunction, op6: OperatorFunction, op7: OperatorFunction, op8: OperatorFunction, op9: OperatorFunction, op10: OperatorFunction, op11: OperatorFunction, op12: OperatorFunction, op13: OperatorFunction, op14: OperatorFunction, op15: OperatorFunction, op16: OperatorFunction, op17: OperatorFunction, op18: OperatorFunction, op19: OperatorFunction, op20: OperatorFunction, op21: OperatorFunction, op22: OperatorFunction, op23: OperatorFunction, op24: OperatorFunction, op25: OperatorFunction, op26: OperatorFunction, op27: OperatorFunction, op28: OperatorFunction, op29: OperatorFunction, op30: OperatorFunction, op31: OperatorFunction, op32: OperatorFunction, op33: OperatorFunction, op34: OperatorFunction, op35: OperatorFunction, op36: OperatorFunction, op37: OperatorFunction, op38: OperatorFunction, op39: OperatorFunction, op40: OperatorFunction, op41: OperatorFunction, op42: OperatorFunction, op43: OperatorFunction, op44: OperatorFunction, op45: OperatorFunction, op46: OperatorFunction, op47: OperatorFunction, op48: OperatorFunction, op49: OperatorFunction, op50: OperatorFunction ): Observable; pipe(...operators: OperatorFunction[]): Observable { if (operators.length === 0) { return this as any; } return operators.reduce((prev, operator) => operator(prev), this as any); } }