/** * @license Use of this source code is governed by an MIT-style license that * can be found in the LICENSE file at https://github.com/cartant/rxjs-etc */ import { Observable, of, zip } from "rxjs"; export function zipArray(observables: Observable[]): Observable; export function zipArray( observables: Observable[], project: (values: T[]) => R ): Observable; export function zipArray( ...args: (Observable[] | ((values: T[]) => R))[] ): Observable { let observables = args[0] as Observable[]; let project = args[1] as (values: T[]) => R; if (observables.length === 0) { return of(project ? project([]) : []); } const applyArgs: any[] = observables.slice(); if (project) { applyArgs.push((...values: any[]) => project(values)); } /*tslint:disable-next-line:deprecation*/ return zip.apply(null, applyArgs as any) as any; }