Асинхронный итератор жалуется на неожиданный токен "*" - PullRequest
0 голосов
/ 06 мая 2018

У меня есть класс TS, который имеет следующий асинхронный генератор, определенный как общедоступный метод доступа:

/**
 * Provides a way to iterate through the templates, one
 * channel at a time.
 */
public async *iterator() {
  let output: IDictionary = {};
  const substitutions = this.isListDataset
    ? this._substitutions
    : [this._substitutions];
  yield this._channels.map(async function*(channel) {
    const fn = await this.compileTemplate(this._topic, channel);
    const output: ITemplateChannel = {
      channel,
      templates: []
    };
    this._substitutions.map((data: IDictionary) => {
      output.templates.push(fn(data));
    });

    yield output;
  });
}

Редактор ( vs-code ) достаточно доволен этим объявлением, но если я запускаю ts-node поверх определения класса, он жалуется:

Неожиданный токен *

Хорошо, я знаю, что для поддержки библиотек необходимо настроить асинхронизаторы и генераторы, но мой tsconfig.json:

{
  "compilerOptions": {
    "declaration": true,
    "module": "commonjs",
    "target": "esnext",
    "lib": ["esnext.asynciterable", "esnext", "es2015.generator"],
    "moduleResolution": "node",
    "sourceMap": true,
    "noImplicitAny": true,
    "outDir": "./lib",
    "removeComments": true,
    "typeRoots": ["./node_modules/@types"]
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "**/*-spec.ts"]
}

Чего мне не хватает?


Примечание: я замечаю, что если я изменю yield output на yield* output, как мне кажется, должно быть ... против кода указывает, что:

enter image description here

Хорошо, теперь я читаю об этой зависимости, но мне неясно, как бы я ее реализовал. Моя неудачная попытка состояла в том, чтобы добавить этот метод в класс:

public [Symbol.asyncIterator]() {
  return Symbol.asyncIterator || Symbol.for("Symbol.asyncIterator");
}

но как-то угадать, мне нужно сопоставить его с функцией map? Это правильно? Или, может быть, сам метод iterator? Возможно оба? Confused.

...