1.0.0 • Published 6 years ago
@kingjs/define-enumerable-type v1.0.0
@kingjs/define-enumerable-type
Define an enumerable type from a MoveNext()
factory.
Usage
Define an enumerable type for iterating Array
using a moveNext()
factory like this:
var defineEnumerableType = require('@kingjs/define-enumerable-type');
var moveNextFactory = function(array) {
var index = -1;
return function moveNext() {
if (index + 1 == array.length)
return false;
this.current_ = array[++index];
return true;
}
}
var ArrayEnumerable = defineEnumerableType(moveNextFactory);
Voila! Now, test the ArrayEnumerable
like this:
var enumerable = new ArrayEnumerable([0, 1, 2]);
var enumerator = enumerable.getEnumerator();
var actual = [];
while (enumerator.moveNext())
actual.push(enumerator.current);
actual;
outputs:
[0, 1, 2];
API
declare function defineEnumerableType(
moveNextFactory: {
(...args: any[]): {
moveNext: { (): Boolean }
}
}): typeof Enumerable;
declare class Enumerable {
constructor(...args: any[]);
getEnumerator: {
(): {
moveNext: { (): Boolean },
current: any
}
}
}
Parameters
moveNextFactory
: a function that returns amoveNext()
function closed over the enumerable activation arguments.
Return Value
An enumerable type whose activation arguments are saved and passed to the specified
moveNextFactory
whengetEnumerator()
is called.
Install
With npm installed, run
$ npm install @kingjs/define-enumerable-type
Acknowledgments
define-enumerable-type
was inspired by the boilerplate generated by C# yield
syntax. Though we cannot generate the state machine, we can generate the type scaffolding.
See Also
License
MIT
1.0.0
6 years ago