Почему функции генератора ES6 дают мне разные результаты в инструментах разработчика Angular 6 и Chrome - PullRequest
0 голосов
/ 01 мая 2019

Функционирование генераторов в 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?

Ответы [ 3 ]

1 голос
/ 01 мая 2019

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

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

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

const values = Array.from(foo());
0 голосов
/ 01 мая 2019

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

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

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

0 голосов
/ 01 мая 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...