我发现我对目标(target)和库(lib)选项以及它们如何与源代码中支持的功能交互感到困惑。我觉得文档需要稍加改进,因此在提出问题之前在这里询问。
我天真地认为,目标指定了输出代码所需运行的JS版本(加上模块加载器)。因此,我们总是可以在源代码中使用所有高级JS功能(如对象扩展),而编译器会为我们指定的目标生成适当的代码。我认为它已经准备好了填充等,并且代码将在目标虚拟机上运行。
然而,lib选项的文档说明默认库取决于目标。但是,库会影响可用的源代码类型,因此也会影响我们可以使用的代码。因此,我们可以使用的源功能取决于目标。这不是我预期的。我应该说我的理解是,它们是具有不同API的类型定义,尽管文档并没有真正说明它们是什么。
我可以看到有些语言功能不依赖于类型,而其他一些则依赖于类型。但是,这是否是产生这种情况的原因尚不清楚。
能否请有人澄清这个问题?
第二个问题是,为什么有ES6和ES2015库,当它们通常被记录为是同一件事时。
谢谢
-target
同时执行这两个操作,并且有些语言特性被下编译而另一些则需要库来在源代码中使用。请问需要翻译哪段内容? - Steve Leees6.d.ts
文件和es2015.d.ts
文件,但是如果您使用--target es6
,则会使用es6.d.ts
,这相当于--lib es6,dom,dom.iterable,scripthost
(如文档中所述)。如果您仅使用--lib es6
,则不会获得 DOM 等。--lib es6
和--lib es2015
给您相同的东西。--target es6
和--target es2015
也给您相同的东西。 - Aaron Beall