Функционирование генераторов в Angular 6/7 очень запутанно. Моя задача - просто напечатать простой массив из функции генератора. Я успешен, делая это в инструментах разработчика Chrome, как показано ниже.

function* foo() {
   yield 'a';
   yield 'b';
   yield 'c';
}

const values = [...foo()];

Но то же самое, я не могу сделать это в Angular 6/7. Я получаю ошибку компиляции как

[ts] Type 'IterableIterator<"a" | "b" | "c">' is not an array type.

Из ошибки я могу понять проблему. Поскольку функция foo () возвращает только одно значение a | b | c каждый раз, мы не можем использовать оператор массива для нее.

Но почему то же самое работает с инструментами разработчика Chrome? Как мы можем заставить его работать на Angular так же, как на инструментах разработчика Chrome?

0
Sreehari 1 Май 2019 в 21:25

3 ответа

Лучший ответ

Как вы можете прочитать здесь, это проблема машинописного текста.

Для ее решения вы можете использовать аргумент --downlevelIteration или вместо оператора распространения вы можете использовать функцию Array.from.

function* foo() {
    yield 'a';
    yield 'b';
    yield 'c';
}

const values = Array.from(foo());
1
Leibale Eidelman 1 Май 2019 в 18:35

Чтобы это исправить, перейдите на страницу tsconfig.json и укажите target как es6 :

{
  "compileOnSave": false,
  "compilerOptions": {
    "target": "es6"
  }
}

Это открытый выпуск для TypeScript:

0
Fullstack Guy 1 Май 2019 в 18:36

Во-первых, в консоли браузера вы пишете JavaScript. Здесь вы получаете ошибку TypeScript. Одним из решений будет проверка опции downlevelIteration в настройках компилятора.

0
mbojko 1 Май 2019 в 18:35