diff --git a/src/index.ts b/src/index.ts index 9896222..dd56ebb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -311,6 +311,14 @@ export class Enumerator implements IEnumerator, Iterator { } } + static isEnumerator(value: object): value is IEnumerator { + return hasMethods(['moveNext', 'reset', 'toIterator'], value) + } + + static isArrayEnumerator(value: any): value is IArrayEnumerator { + return typeof value['setIndex'] === 'function' && this.isEnumerator(value) + } + static toIterator(enumerator: IEnumerator): Iterator { return new this(enumerator) } @@ -585,7 +593,9 @@ export class Enumerable implements IEnumerable, Iterable { static from(value: IEnumerable | IEnumerator | Iterable | Iterator): Enumerable { if (this.isEnumerable(value)) { return value - } else if (this.isEnumerator(value)) { + } else if (Enumerator.isArrayEnumerator(value)) { + return new ArrayEnumerble(value) + } else if (Enumerator.isEnumerator(value)) { return new Enumerable(value) } else if (isIterable(value)) { const enumerator = Enumerator.fromIterable(value) @@ -608,10 +618,6 @@ export class Enumerable implements IEnumerable, Iterable { return typeof value['enumerator'] === 'function' } - static isEnumerator(value: object): value is IEnumerator { - return hasMethods(['moveNext', 'reset', 'toIterator'], value) - } - [Symbol.iterator](): Iterator { return this._enumerator.toIterator() }