打字稿目标不影响源javascript文件(使用allowJs)?

时间:2017-08-04 09:07:24

标签: javascript typescript

我有一个带有javascript代码库的项目。我想开始逐渐转向打字稿,并确保现有的JavaScript代码保持在ES5级别。即保证ES6功能将被转换为ES5。

我认为这可以通过将tsc引入构建链来解决。 tsconfig.json具有ES5的目标,并且tsc设置为处理两个typescript ja javascript文件。

显然tsc不会将javascript文件转换为ES5级别。或者我在设置中遗漏了什么?

我的猜测是我仍然需要为构建链添加babel以确保将在浏览器中执行的所有代码都处于ES5级别。

以下简单示例:

tstest.js包含ES6功能:

var arr = ["a", "b", "c"];
console.log(arr.includes("b"));

javascript:

没有进行透明化
/tmp> tsc -t ES5 -allowJs -outDir ./transpiled tstest.js
/tmp> cat transpiled/tstest.js
var arr = ["a", "b", "c"];
console.log(arr.includes("b"));

1 个答案:

答案 0 :(得分:0)

现在发现它。 Array.includes在ES2016中的功能,因此没有被编译。例如。即使在javascript源代码中,箭头函数也会相应地转换为ES5级别:

/tmp> cat tstest.js
const f = a => 2 * a;
console.log(f(5));

tsc之后的结果:

/tmp> tsc -t ES5 -allowJs -outDir ./transpiled tstest.js
/tmp> cat transpiled/tstest.js
var f = function (a) { return 2 * a; };
console.log(f(5));