@structured/iterable
TypeScript icon, indicating that this package has built-in type declarations

1.1.2 • Public • Published

@structured/itertable

The python language (both python core and the itertools module) have great support for dealing with iterators and iterables. Sometimes the same functionality would be nice to have in javascript and typescript.

This package implements some of those useful iterator-related functions in typescript, so that you can get the same great readability as a python program, all while keeping that juicy static-type safety.

Installation

yarn add @structured/itertable

API

Check out the docs! Created with typedoc

Examples

zip; Strongly Typed and Versatile

import { zip, repeat, count } from '@structured/itertable'

for (const [c, n] of zip('Hello', repeat(2))) {
  // c is type string
  // n is type number
  console.log(c.repeat(n)) // No compilation errors!
}

for (const [i, c, n] of zip(count(0), 'Hello', repeat(2))) {
  // i is type number
  // c is type string
  // n is type number
  console.log(i * i, c.repeat(n))
}

Strong Tuple types

import { combinations, range } from '@structured/itertable'

for (const combo of combinations(range(5), 100)) {
  console.log(Math.pow(...combo)) // Error: "Expected 2 arguments, but got 100."
}

for (const combo of combinations(range(5), 2)) {
  console.log(Math.pow(...combo)) // no error
}

Reliably typed map

The argument types are inferred from the passed mapper function.

import { map, range, repeat } from '@structured/itertable'

// Error: "`map` Expected 3 arguments, but got 2."
for (const v of map(Math.pow, range(10, 5, -1))) {
  console.log(v)
}

// No error
for (const v of map(Math.pow, range(10, 5, -1), repeat(2))) {
  console.log(v)
}

// Error: "`map` Expected 2 arguments, but got 3."
for (const s of map((n) => "a".repeat(n), range(5), repeat(4))) {
  console.log(s)
}

Readme

Keywords

none

Package Sidebar

Install

npm i @structured/iterable

Weekly Downloads

1

Version

1.1.2

License

MIT

Unpacked Size

90.6 kB

Total Files

7

Last publish

Collaborators

  • shlappas