代码之家  ›  专栏  ›  技术社区  ›  James T.

迭代器的类型是什么?

  •  0
  • James T.  · 技术社区  · 3 年前

    我可以实现我自己的生成器函数,该函数返回generator。此的类型可以定义为 type Iterable = { [Symbol.iterator](): Generator }; ,但这对像Array这样的内置类型无效。可能是因为它们被设计为多次迭代,而不是一次。

    在读取Array上的文档时,它说这个方法返回“新的数组迭代器对象”,该对象链接到 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#the_iterator_protocol

    type IterableBuiltIn = { [Symbol.iterator](): { next: any, value: any, return: any };
    
    const array: IterableBuiltIn = [1, 2, 3];
    for (const value in array) {
        console.log(value);
    }
    
    2 回复  |  直到 3 年前
        1
  •  0
  •   James T.    3 年前

    为了不出现类型错误,我们至少需要将类型定义为 type Iterator = { [Symbol.iterator](): { next: any, value: any, return: any }; ,但根据文档中的规范,这是更彻底的。

    type IteratorResult = { done?: boolean, value?: any };
    type Iterator = { 
        [Symbol.iterator](): { 
            next(arg?: any): IteratorResult, 
            return?(arg?: any): IteratorResult, 
            throw?(error?: any): IteratorResult 
        } 
    };
    
        2
  •  0
  •   James T.    3 年前

    更好的是,刚刚注意到,这是在es2015.iterable中定义的。这意味着有了正确的tsconfig,这就是为你定义的。

    推荐文章