Тип и Итератор: Тип 'IterableIterator <t> 'не является типом массива

Когда я использую выражение yield* в TypeScript, оно всегда выдает ошибку.

Тип "IterableIterator" не является типом массива.

Как правильно установить типы, не используя any чтобы избежать ошибок?

function* g1(): IterableIterator<number> {
  yield 2;
  yield 3;
  yield 4;
}

function* g2(): IterableIterator<number> {
  yield 1;
  // ERROR: Type 'IterableIterator<number>' is not an array type.
  yield* g1();
  yield 5;
}

const iterator = g2();

Ответы

Ответ 1

Если вы настроите таргетинг на es5, вам нужно будет включить итерацию вниз уровня в явном виде в tsconfig:

{
    "compilerOptions": {
        "target": "es5",
        "downlevelIteration": true
    }
}

Ответ 2

tsc demo.ts --lib "es6","dom" --downLevelIteration

Используйте эту команду для компиляции. Это решит проблему. Добавление этих значений в tsconfig.json не решит проблему, если tsconfig.json создан с target: es5. обновление tsconfig.json вручную не будет работать. Используйте эту команду, просто измените имя вашего .ts файла.