我正在开发一个TypeScript项目,我们正在使用ES2017作为输出目标,以及其中一个库,因为它将通过Babel,我们希望支持最新的功能集“环境”我们的目标是巴贝尔。
一切似乎都很好,所以我并不太担心。但是,我不知道幕后发生了什么或“lib”选项真正做了什么(除了告诉我的IDE我可以做什么,比如传播操作,Promises等),如果它更多/从TypeScript中指定最高输出然后编译为Babel中的特定目标效率较低。这也是通过WebPack进行的,所以我们正在利用树摇动。
第二个问题是,当lib中包含“ES2017”时,是否包含ES2015和ES2016中的所有功能(换句话说,是否有任何理由包含ES2015和/或ES2016,ES2017在列表中?)
{
"compilerOptions": {
"target": "ES2017",
"module": "ES2015",
"moduleResolution": "Node",
"sourceMap": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"forceConsistentCasingInFileNames": true,
"allowSyntheticDefaultImports": true,
"noEmitHelpers": true,
"importHelpers": true,
"pretty": true,
"alwaysStrict": true,
"lib": [
"DOM",
"ES2017",
"DOM.Iterable",
"ScriptHost"
],
"baseUrl": "./client",
"paths": {
"styles/*": ["./app/styles/*"],
"core/*": ["./app/core/*"],
"components/*": ["./app/components/*"],
"containers/*": ["./app/containers/*"],
"assets/*": ["./assets/*"],
"config/*": ["./config/*"]
}
},
"files": [
"./client/custom-typings.d.ts",
"./client/app/app.ts"
]
}
顺便说一下,当在Babel“Env”中定位“last 1 Chrome version”时,它几乎没有任何转换,这非常令人兴奋。我们只是构建原型,而不是生产代码,所以我们专门添加我们需要支持它们时需要支持的浏览器,但几乎从不做任何不是Chrome的最后1或2版本的事情。
答案 0 :(得分:4)
仔细查看Typescript GitHub上lib
种可能性的实际实现情况,似乎ES2017
包含所有这些包:
/// <reference path="lib.es2016.d.ts" />
/// <reference path="lib.es2017.object.d.ts" />
/// <reference path="lib.es2017.sharedmemory.d.ts" />
/// <reference path="lib.es2017.string.d.ts" />
es2016.d.ts包含以下参考文献:
/// <reference path="lib.es2015.d.ts" />
/// <reference path="lib.es2016.array.include.d.ts" />
最后es2015.d.ts引用:
/// <reference path="lib.es2015.core.d.ts" />
/// <reference path="lib.es2015.collection.d.ts" />
/// <reference path="lib.es2015.generator.d.ts" />
/// <reference path="lib.es2015.iterable.d.ts" />
/// <reference path="lib.es2015.promise.d.ts" />
/// <reference path="lib.es2015.proxy.d.ts" />
/// <reference path="lib.es2015.reflect.d.ts" />
/// <reference path="lib.es2015.symbol.d.ts" />
/// <reference path="lib.es2015.symbol.wellknown.d.ts" />
/// <reference path="lib.es5.d.ts" />
因此,假设es2017包含大多数ES功能,这是安全的。
虽然有趣的是es6不包含在任何地方,并且提供了单独的file而没有任何引用。我不知道它是如何工作的,但我认为它是上述某些事情的单独组合。
修改强>
我已经针对上述es6
难题进行了更多研究,并将我的发现发布在另一个question。