@lou.codes/iterables
Version:
🔁 Iterable and AsyncIterable utils
25 lines (24 loc) • 840 B
TypeScript
import type { IsomorphicIterable } from "@lou.codes/types";
/**
* Get a `Symbol.iterator` from an iterable or a `Symbol.asyncIterator` from an
* asynchronous iterable.
*
* @category Asynchronous Common
* @example
* ```typescript
* const iterator = getIterator([1, 2, 3]);
* iterator.next(); // { value: 1, done: false }
* iterator.next(); // { value: 2, done: false }
* iterator.next(); // { value: 3, done: false }
* iterator.next(); // { value: undefined, done: true }
* ```
* @param iterable Iterable to get the iterator from.
* @returns Iterator instance.
*/
export declare const getIterator: <Iterable extends IsomorphicIterable>(
iterable: Iterable,
) => Iterable extends IsomorphicIterable<infer Item> ?
Iterable extends AsyncIterable<Item> ?
AsyncIterator<Item, Item, Item>
: Iterator<Item, Item, Item>
: never;