Javascript 为什么ES6生成器函数在Angular 6和chrome开发工具上给了我不同的结果
发电机在角6/7中的运行非常混乱。我的任务只是从生成器函数打印一个简单数组。我在chrome开发者工具中成功地做到了这一点,如下所示Javascript 为什么ES6生成器函数在Angular 6和chrome开发工具上给了我不同的结果,javascript,angular,typescript,ecmascript-6,Javascript,Angular,Typescript,Ecmascript 6,发电机在角6/7中的运行非常混乱。我的任务只是从生成器函数打印一个简单数组。我在chrome开发者工具中成功地做到了这一点,如下所示 function* foo() { yield 'a'; yield 'b'; yield 'c'; } const values = [...foo()]; 但同样的事情,我不能在6/7的角度做。我得到一个编译错误,如下所示 [ts] Type 'IterableIterator<"a" | "b" | "c">' is not
function* foo() {
yield 'a';
yield 'b';
yield 'c';
}
const values = [...foo()];
但同样的事情,我不能在6/7的角度做。我得到一个编译错误,如下所示
[ts] Type 'IterableIterator<"a" | "b" | "c">' is not an array type.
[ts]类型“IterableTerator”不是数组类型。
从错误中,我可以理解这个问题。由于函数foo()每次只返回一个值a | b | c,因此不能对其使用数组运算符
但为什么在chrome开发者工具上也是如此呢?我们如何才能使它在Angular和chrome开发者工具上工作?正如您所看到的,这是一个打字脚本问题
要解决此问题,您可以使用--downlevelIteration
参数,也可以使用Array.from
函数代替spread运算符
function* foo() {
yield 'a';
yield 'b';
yield 'c';
}
const values = Array.from(foo());
首先,在浏览器的控制台中,您正在编写JavaScript。这里,您得到一个TypeScript错误。一种解决方案是检查编译器设置中的
downlevelIteration
选项。要解决此问题,请转到tsconfig.json并将目标提到es6:
{
"compileOnSave": false,
"compilerOptions": {
"target": "es6"
}
}
这是一个for-TypeScript:我不知道angular是如何工作的,但它可能只允许元素在实际数组中扩散?ECMAScript规范当然允许任何iterable。