使用TypeScript中的最新JavaScript功能,例如ES2018

ste*_*425 13 compilation typescript ecmascript-next

我已经尝试在他们的配置上搜索TypeScripts文档,似乎无法找到应该是一个简单问题的答案.

简单地说,如何配置typescript编译器以便它知道我们正在使用哪些JavaScript功能集?

因此,例如,ES2019落地,我想'哦,我想给我一些'.在那种情况下,我需要升级什么,以允许编译器进行转换和pollyfill它需要什么?

tsconfig中的lib选项让我困惑,文档没有解释可用的库.我也找不到任何直接的东西.

所以让我们说ES2019出来了,我为它添加了lib选项(假设会有一个).这是否意味着我现在可以使用ES2019功能?如果我希望支持ES2019中的所有内容,我是否需要为其下的每个其他版本添加lib?或者添加ES2019 lib是否提供了我所需要的一切?

这些图书馆来自哪里?它们是CoreScript核心库的一部分吗?为了获得更多我必须升级,或者我可以简单地升级一个单独的包,它会全部工作吗?

最后,这些lib提供了完全支持该版本规范的所有必要条件.或者它是功能的子集?

在我们的项目中,我们目前使用TypeScript版本2.5.3

我意识到这是很多问题所以任何有关任何信息或文档链接的信息都会非常感激.

Tit*_*mir 31

这个故事有点复杂,我们应该先把它分成两部分:语言特性和运行时特性.

ES语言功能

当我们说语言功能时,我们指的是核心JavaScript语言语法的更改.例如,ES 2015添加对类,箭头函数(=>)和for-of迭代的支持

Typescript尝试尽快实现所有稳定的语言功能提议,并将它们下编译为指定为target编译器选项的ES版本.所以这意味着如果你有最新的Typescript编译器,它增加了对新ES 2019语言功能的支持,你就可以将它一直向下编译ES3.Typescript将发出必要的代码,使这些功能适用于您所定位的任何ES版本.

你现在可以看到这个.如果您定位ES5,箭头函数将编译为常规functions并使用_this局部变量进行捕获this.类被编译为函数和prototype集合上的适当字段.

ES运行时功能

除语言功能外,我们还有一些运行时功能,用于描述可用的内置对象类型,以及这些运行时对象具有的方法和字段.最近版本中的新对象类型的示例ESPromiseProxy.

Typescript不为这些功能提供poly-fill,如果运行时没有为这些功能提供支持,如果你想使用它们,你需要自带poly-fill实现.

然而,Typescript需要知道运行时存在哪些内置对象以及它们的方法/字段是什么,这是lib选项的来源.它允许您指定运行时环境的外观.

所以你可以举例来说es5,但是指定运行时将所有内置对象都符合es2015标准(有些可能由运行时自己实现,其他可能由你通过poly-fill添加)

两者的交集

上面的划分是一种简化,因为某些语言特征依赖于某些内置对象和方法的存在.

例如,async/await语言功能依赖于promises的存在.因此,如果您使用async/await和目标,es5您将收到Promise构造函数不存在的错误.如果你定位es5但是你指定lib: [ 'es2015', 'dom' ]你将不再收到错误,因为你告诉编译器即使你希望向下编译es5,在运行时Promise构造函数将按照es2015特定lib中表示的运行时规范存在(而不是编译器的问题)这将如何发生,poly-fill或内置的运行时行为).

通常,如果存在这种依赖,那么typescript编译器将发出错误,某些类型缺失,您可以升级lib,或更改目标(这将更改使用的默认库),但您必须确保运行时具有必要的支持.

例外

可能并不总是可能一直向下编译语言功能es3(或者由于缺少运行时功能,或者仅仅因为实现该功能的高成本而不是编译器团队的优先级).一个例子是定位时的属性访问器(get/ set)es3,这是不受支持的.但是,如果您使用的是不受支持的语言功能/目标组合,则编译器应警告您.

  • 这一切都很好地解释了,谢谢。我没有意识到语言功能是TypeScript版本的核心。我也没有意识到TypeScript也不会自动填充运行时功能。我正在运行一个有角度的应用程序,它为我们提供了pollyfills。我没有意识到这一点。下一步调查到底是什么?谢谢! (4认同)