import type { Arr, Zip, ZipFill, ZipRemainderObj } from '@toolbox-ts/types/defs/array';
/**
* Zips two arrays together and returns the zipped array.
* The length of the returned array is equal to the length of the shorter input array and discards the remaining elements of the longer array.
*
* @param a - The first array to zip.
* @param b - The second array to zip.
* @returns The zipped array.
*
* @example
* ```ts
* zip([1, 2], ['a', 'b', 'c'])
* // [[1, 'a'], [2, 'b']]
* ```
*/
export declare function zip(a: A, b: B): Zip;
/**
* Zips two arrays together and fills the shorter array with a specified value.
*
* @param a - The first array to zip.
* @param b - The second array to zip.
* @param fill - The value to fill the shorter array with.
* @returns The zipped array with the shorter array filled with the specified value.
*
* @example
* ```ts
* zipFill([1, 2], ['a', 'b', 'c'], null)
* // [[1, 'a'], [2, 'b'], [null, 'c']]
* ```
*/
export declare function zipFill(a: A, b: B, fill?: F): ZipFill;
/**
* Zips two arrays together and returns the zipped array along with the remainder of the longer array.
* If one of the arrays is empty, the remainder will be the non-empty array.
*
* @param a - The first array to zip.
* @param b - The second array to zip.
* @returns An object containing the zipped array and the remainder of the longer array.
*
* @example
* ```ts
* zipRemainder([1, 2], ['a', 'b', 'c'])
* // { zipped: [[1, 'a'], [2, 'b']], remainder: ['c'] }
* ```
*/
export declare function zipRemainder(a: A, b: B): ZipRemainderObj;
export declare function zipWith(a: A, b: B, fn: (a: A[number], b: B[number]) => R): R[];