| /** |
| * Returns true if the provided object is an Object (i.e. not a string literal) |
| * and implements the Iterator protocol. |
| * |
| * This may be used in place of [Array.isArray()][isArray] to determine if |
| * an object should be iterated-over e.g. Array, Map, Set, Int8Array, |
| * TypedArray, etc. but excludes string literals. |
| * |
| * @example |
| * ```ts |
| * isIterableObject([ 1, 2, 3 ]) // true |
| * isIterableObject(new Map()) // true |
| * isIterableObject('ABC') // false |
| * isIterableObject({ key: 'value' }) // false |
| * isIterableObject({ length: 1, 0: 'Alpha' }) // false |
| * ``` |
| */ |
| export function isIterableObject(maybeIterable) { |
| return ( |
| typeof maybeIterable === 'object' && |
| typeof (maybeIterable === null || maybeIterable === void 0 |
| ? void 0 |
| : maybeIterable[Symbol.iterator]) === 'function' |
| ); |
| } |