当tsconfig.json具有以下内容
"target": "es5",
"lib": [ "es6", "dom", "es2017" ]
它似乎没有将es2017构造转换为es5。例如,以下将在IE11上失败:
var foo = [1, 2, 3].includes(1);
这是设计使然还是我缺少tsconfig.json中的设置?
答案 0 :(得分:1)
说明Typescript的目标和库设置的功能
我考虑的简化方法是target
表示输出JavaScript将具有的语法,而lib
表示 API成员您的TypeScript源代码可以使用。这两个问题的答案中有更多详细信息:
...似乎没有将es2017构造转换为es5 ...这是设计使然还是我缺少tsconfig.json中的设置?
您是对的。这是设计使然。 TypeScript转换为target
语法;它不会填充target
中缺少的API成员。 Here is a quote来自TypeScript团队的核心成员:
我认为您正在将转译与自动填充混为一谈。 TypeScript不会像Babel那样自动为您填充,但是会执行语法下移(例如,箭头功能)。如果您想使用ES6运行时原型方法,则只需提供一个适当的ES6 polyfill及其随附的定义文件。
如果您的lib
包含Array.prototype.include
运行时中不存在的API成员(例如target
),那么您需要安装提供这些API成员的polyfill。
答案 1 :(得分:0)
您可以在此处查看列表浏览器兼容性,以了解包含方法。
在此情况下,它不支持IE。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes