/**
 * @packageDocumentation
 *
 * Calls a function for each value in an (async)iterable.
 *
 * The function can be sync or async.
 *
 * Async functions can be awaited on so may slow down processing of the (async)iterable.
 *
 * @example
 *
 * ```javascript
 * import each from 'it-foreach'
 * import drain from 'it-drain'
 *
 * // This can also be an iterator, generator, etc
 * const values = [0, 1, 2, 3, 4]
 *
 * // prints [0, 0], [1, 1], [2, 2], [3, 3], [4, 4]
 * const arr = drain(
 *   each(values, console.info)
 * )
 * ```
 *
 * Async sources and callbacks must be awaited:
 *
 * ```javascript
 * import each from 'it-foreach'
 * import drain from 'it-drain'
 *
 * const values = async function * () {
 *   yield * [0, 1, 2, 3, 4]
 * }
 *
 * // prints [0, 0], [1, 1], [2, 2], [3, 3], [4, 4]
 * const arr = await drain(
 *   each(values(), console.info)
 * )
 * ```
 */
/**
 * Invokes the passed function for each item in an iterable
 */
declare function forEach<T>(source: Iterable<T>, fn: (thing: T, index: number) => Promise<void>): AsyncGenerator<T, void, undefined>;
declare function forEach<T>(source: Iterable<T>, fn: (thing: T, index: number) => void): Generator<T, void, undefined>;
declare function forEach<T>(source: Iterable<T> | AsyncIterable<T>, fn: (thing: T, index: number) => void | Promise<void>): AsyncGenerator<T, void, undefined>;
export default forEach;
//# sourceMappingURL=index.d.ts.map