add checks for array enumerators
This commit is contained in:
parent
7f5561a0cc
commit
f3bfae6e14
1 changed files with 11 additions and 5 deletions
16
src/index.ts
16
src/index.ts
|
@ -311,6 +311,14 @@ export class Enumerator<T> implements IEnumerator<T>, Iterator<T> {
|
|||
}
|
||||
}
|
||||
|
||||
static isEnumerator<T>(value: object): value is IEnumerator<T> {
|
||||
return hasMethods(['moveNext', 'reset', 'toIterator'], value)
|
||||
}
|
||||
|
||||
static isArrayEnumerator<T>(value: any): value is IArrayEnumerator<T> {
|
||||
return typeof value['setIndex'] === 'function' && this.isEnumerator(value)
|
||||
}
|
||||
|
||||
static toIterator<T>(enumerator: IEnumerator<T>): Iterator<T> {
|
||||
return new this(enumerator)
|
||||
}
|
||||
|
@ -585,7 +593,9 @@ export class Enumerable<T> implements IEnumerable<T>, Iterable<T> {
|
|||
static from<T>(value: IEnumerable<T> | IEnumerator<T> | Iterable<T> | Iterator<T>): Enumerable<T> {
|
||||
if (this.isEnumerable<T>(value)) {
|
||||
return value
|
||||
} else if (this.isEnumerator<T>(value)) {
|
||||
} else if (Enumerator.isArrayEnumerator<T>(value)) {
|
||||
return new ArrayEnumerble(value)
|
||||
} else if (Enumerator.isEnumerator<T>(value)) {
|
||||
return new Enumerable(value)
|
||||
} else if (isIterable(value)) {
|
||||
const enumerator = Enumerator.fromIterable(value)
|
||||
|
@ -608,10 +618,6 @@ export class Enumerable<T> implements IEnumerable<T>, Iterable<T> {
|
|||
return typeof value['enumerator'] === 'function'
|
||||
}
|
||||
|
||||
static isEnumerator<T>(value: object): value is IEnumerator<T> {
|
||||
return hasMethods(['moveNext', 'reset', 'toIterator'], value)
|
||||
}
|
||||
|
||||
[Symbol.iterator](): Iterator<T> {
|
||||
return this._enumerator.toIterator()
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue