• Takes two iterables or asynchronous iterable and returns a new iterable or asynchronous iterable with the length of the shortest iterable with tuples containing the items from both.

    Example

    const zipNumbers = zip([0, 1, 2]);
    zipNumbers([3, 4, 5]); // [[0, 3], [1, 4], [2, 5]]

    Type Parameters

    • FirstIterable extends IsomorphicIterable

    Parameters

    • iterableFirst: FirstIterable

      One of the iterables to be zipped.

    Returns (<SecondIterable>(iterableSecond) => FirstIterable extends IsomorphicIterable<FirstItem>
        ? SecondIterable extends IsomorphicIterable<SecondItem>
            ? FirstIterable extends {
                    [asyncIterator]() => AsyncIterator<FirstItem, any, undefined>;
                }
                ? {
                    [asyncIterator]() => AsyncIterableIterator<readonly [FirstItem, SecondItem]>;
                    next(...args) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                    return?(value?) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                    throw?(e?) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                }
                : SecondIterable extends {
                        [asyncIterator]() => AsyncIterator<SecondItem, any, undefined>;
                    }
                    ? {
                        [asyncIterator]() => AsyncIterableIterator<readonly [FirstItem, SecondItem]>;
                        next(...args) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                        return?(value?) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                        throw?(e?) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                    }
                    : {
                        [iterator]() => IterableIterator<readonly [FirstItem, SecondItem]>;
                        next(...args) => IteratorResult<readonly [FirstItem, SecondItem], any>;
                        return?(value?) => IteratorResult<readonly [FirstItem, SecondItem], any>;
                        throw?(e?) => IteratorResult<readonly [FirstItem, SecondItem], any>;
                    }
            : never
        : never)

    Curried function with iterableFirst in context.

      • <SecondIterable>(iterableSecond): FirstIterable extends IsomorphicIterable<FirstItem>
            ? SecondIterable extends IsomorphicIterable<SecondItem>
                ? FirstIterable extends {
                        [asyncIterator]() => AsyncIterator<FirstItem, any, undefined>;
                    }
                    ? {
                        [asyncIterator]() => AsyncIterableIterator<readonly [FirstItem, SecondItem]>;
                        next(...args) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                        return?(value?) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                        throw?(e?) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                    }
                    : SecondIterable extends {
                            [asyncIterator]() => AsyncIterator<SecondItem, any, undefined>;
                        }
                        ? {
                            [asyncIterator]() => AsyncIterableIterator<readonly [FirstItem, SecondItem]>;
                            next(...args) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                            return?(value?) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                            throw?(e?) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                        }
                        : {
                            [iterator]() => IterableIterator<readonly [FirstItem, SecondItem]>;
                            next(...args) => IteratorResult<readonly [FirstItem, SecondItem], any>;
                            return?(value?) => IteratorResult<readonly [FirstItem, SecondItem], any>;
                            throw?(e?) => IteratorResult<readonly [FirstItem, SecondItem], any>;
                        }
                : never
            : never
      • Type Parameters

        • SecondIterable extends IsomorphicIterable

        Parameters

        • iterableSecond: SecondIterable

        Returns FirstIterable extends IsomorphicIterable<FirstItem>
            ? SecondIterable extends IsomorphicIterable<SecondItem>
                ? FirstIterable extends {
                        [asyncIterator]() => AsyncIterator<FirstItem, any, undefined>;
                    }
                    ? {
                        [asyncIterator]() => AsyncIterableIterator<readonly [FirstItem, SecondItem]>;
                        next(...args) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                        return?(value?) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                        throw?(e?) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                    }
                    : SecondIterable extends {
                            [asyncIterator]() => AsyncIterator<SecondItem, any, undefined>;
                        }
                        ? {
                            [asyncIterator]() => AsyncIterableIterator<readonly [FirstItem, SecondItem]>;
                            next(...args) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                            return?(value?) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                            throw?(e?) => Promise<IteratorResult<readonly [FirstItem, SecondItem], any>>;
                        }
                        : {
                            [iterator]() => IterableIterator<readonly [FirstItem, SecondItem]>;
                            next(...args) => IteratorResult<readonly [FirstItem, SecondItem], any>;
                            return?(value?) => IteratorResult<readonly [FirstItem, SecondItem], any>;
                            throw?(e?) => IteratorResult<readonly [FirstItem, SecondItem], any>;
                        }
                : never
            : never