如何在打字稿中产生*数组

问题描述 投票:0回答:1

我有一个生成器方法,该方法将一些东西异步地添加到数组中,最后像下面这样生成每个带有yield* array的成员:

while (!done) {
      await promise;
      yield* results; //<-- the array
      results = [];  //its emptied so as to not to yield dupes
      done = !this.#eventsListened.has(eventName);
    }

但是我们友好的邻居tsc报告了一个错误,我什至无法开始理解它或如何解决它。谁能解释这个错误是什么意思,然后我应该怎么产生数组的内容?

TS2766:由于'next'方法,无法将迭代委派给值的迭代器期望类型为'undefined',但是包含的生成器将始终发送“未知”。

编辑:

整个生成器函数如下
  /**
   * Returns an iterator that loops over caught events
   * @yields Promise<Event|CustomEvent>
   */
  async *on(eventName: string, options?: AddEventListenerOptions): AsyncGenerator<Event> {
    if (this.#eventsListened.has(eventName)) {
      return;
    }
    let results: Event[] = [];

    let resolve: (value?: PromiseLike<Event> | Event) => void;

    let promise = new Promise<Event>(r => (resolve = r));
    let done = false;
    this.#eventsListened.add(eventName);

    if (typeof options === 'object' && typeof options.once !== 'undefined') {
      throw new Error('options.once is not supported. Use EventTarget2.once instead');
    }
    const callback = (evt: Event) => {
      results.push(evt);
      resolve();
      promise = new Promise<Event>(r => (resolve = r));
    };

    this.addEventListener('eventName', callback, options);
    while (!done) {
      await promise;
      yield* results;
      results = [];
      done = !this.#eventsListened.has(eventName);
    }
    this.removeEventListener(eventName, callback);
  }

我有一个生成器方法,该方法将一些内容异步地添加到数组中,并最终使每个成员具有yield *数组,如下所示:while(!done){等待promise;产量*结果; //

javascript arrays typescript async-await generator
1个回答
1
投票

您的主要问题是AsyncGenerator<Event> ... ...由于您没有指定第三个通用参数,因此使用了默认值(unknown),并且unknownundefined不匹配。

© www.soinside.com 2019 - 2024. All rights reserved.