@lopatnov/make-iterable
v3.1.0
Published
A TypeScript library that converts objects, functions, and their prototypes into Array-like iterable entities. Supports ES Modules, CommonJS, and UMD.
Maintainers
Readme
@lopatnov/make-iterable
A TypeScript library that converts objects, functions, and their prototypes into Array-like iterable entities. Apply it to a class prototype and every instance becomes iterable automatically.
Table of Contents
Installation
npm install @lopatnov/make-iterableBrowser (CDN):
<script src="//lopatnov.github.io/make-iterable/dist/make-iterable.umd.min.js"></script>Usage
ES Modules
import makeIterable from "@lopatnov/make-iterable";CommonJS
const makeIterable = require("@lopatnov/make-iterable");Browser / UMD
<script src="make-iterable.umd.min.js"></script>
<script>
// available as window.makeIterable
var x = makeIterable({});
</script>API
function makeIterable<T>(value: T): T & Array<any>;Converts value to an Array-like iterable object in place and returns it. The original object reference is preserved — value === makeIterable(value).
The function attaches all Array.prototype methods (push, pop, splice, slice, indexOf, map, filter, forEach, etc.) and implements Symbol.iterator, enabling for...of loops and the spread operator.
Throws Error when value is undefined, null, a boolean, a number, or a string.
Examples
Make an Object Iterable and Array-Like
const x = { hello: "world" };
const iterableX = makeIterable(x);
iterableX.push(10); // [10]
iterableX.push(20); // [10, 20]
iterableX.push(30); // [10, 20, 30]
iterableX.push(40); // [10, 20, 30, 40]
iterableX.pop(); // [10, 20, 30]
for (const index in x) {
console.log(`Index [${index}] = ${x[index]}`);
// "Index [0] = 10"
// "Index [1] = 20"
// "Index [2] = 30"
// "Index [hello] = world"
}
for (const value of x) {
console.log(value); // 10, 20, 30
}
console.log(x === iterableX); // true
console.log(iterableX.indexOf(30)); // 2
console.log([...iterableX]); // [10, 20, 30]
console.log(iterableX.hello); // "world"Make a Class Iterable via Prototype
class Simple {
constructor(public message: string) {}
}
makeIterable(Simple.prototype);
const z = new Simple("Length is not enumerable now") as Simple & any[];
z.push([1, 2], [3, 4], [5, 6]);
for (const index in z) {
console.log(`z[${index}]=${z[index]}`);
// "z[0]=1,2"
// "z[1]=3,4"
// "z[2]=5,6"
// "z[message]=Length is not enumerable now"
}Make a Function Iterable
const fn = function () {};
const iterableFn = makeIterable(fn);
iterableFn.push(1, 2, 3, 4, 5);
console.log(iterableFn.indexOf(3)); // 2
console.log([...iterableFn]); // [1, 2, 3, 4, 5]Demo
Contributing
Contributions are welcome! Please read CONTRIBUTING.md before opening a pull request.
- Bug reports → open an issue
- Questions → Discussions
- Found it useful? A star on GitHub helps others discover the project
Built With
- TypeScript — strict typing throughout
- Rollup — bundled to ESM, CJS, and UMD formats
- Node.js Test Runner — built-in test runner, zero dependencies
- OXLint — fast JavaScript/TypeScript linter
- oxfmt — code formatter
License
Apache-2.0 © 2019–2026 Oleksandr Lopatnov · LinkedIn
