打字稿 - > ES5问题

时间:2016-10-28 18:50:54

标签: javascript node.js typescript

我用打字稿写下这个:

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"
  }
}

1 个答案:

答案 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))