Skip to content

Instantly share code, notes, and snippets.

@guiseek
Last active September 16, 2025 04:28
Show Gist options
  • Save guiseek/59ddc33d250673cb47a703c6bc706c8b to your computer and use it in GitHub Desktop.
Save guiseek/59ddc33d250673cb47a703c6bc706c8b to your computer and use it in GitHub Desktop.
range.ts
export function range(length: number): IterableIterator<number>
export function range(start: number, stop: number): IterableIterator<number>
export function range(start: number, stop: number, step: number): IterableIterator<number>
export function* range(start: number, stop?: number, step = 1): IterableIterator<number> {
if (stop === undefined) {
return yield* range(0, start)
}
if (step === 0) {
throw new RangeError('Step cannot be zero.')
}
if ((start < stop && step < 0) || (start > stop && step > 0)) {
throw new RangeError('Sign of step value causes infinite range.')
}
if (step > 0) {
for (let i = start; i < stop; i += step) {
yield i
}
}
else {
for (let i = start; i > stop; i += step) {
yield i
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment