我用打字稿写下这个:
const mask = [...Array(10)].map((item) => 0);
在节点控制台中,它会生成一个包含10个零的数组:
> [...Array(10)].map((item) => 0);
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
一旦在javascript中发布,就会产生:
var mask = Array(10).slice().map(function (item) { return 0; });
但这不等同于:
> Array(10).slice().map(function (item) { return 0; })
[ , , , , , , , , , ]
我的印象是打字稿应该产生iso功能代码。我错了吗?我应该注意TS正在制作的所有东西吗?
我使用节点v7,tsc 1.20150623.0使用此配置:
{
"compilerOptions": {
"emitDecoratorMetadata": true,
"module": "commonjs",
"target": "ES5",
"outDir": ".tmp/js",
"rootDir": "js"
}
}
答案 0 :(得分:2)
这是known and open issue with TypeScript,应该在TypeScript 2.1中修复。
以下代码:
[...(new Array(5))]
转换为:
(new Array(5)).slice();
但是,ES6的含义并不相同。请参阅以下输出:
> [...(new Array(5))] [ undefined, undefined, undefined, undefined, undefined ] > (new Array(5)).slice(); [ , , , , ]
预期行为:
Array.apply(null, Array(5))