我应该使用打字稿吗?或者我可以使用ES6?

cjs*_*ker 282 angularjs typescript ecmascript-6

我的日常工作是使用AngularJS的客户开发人员.我们正在评估是否要使用TypeScript.我对typescript做了一些研究,几乎每个我需要的JavaScript包都必须有定义类型文件.我发现这不是很方便,特别是如果我想尝试新的东西,他们没有它的定义.它真的很令人沮丧.(即使是当前的jQuery定义也会给我一些问题,如果我想使用typescript 1.5 beta).我开始关注ES6,它看起来与TypeScript类似.我应该只使用ES6吗?另外,我听说angular 2将完全支持TypeScript,这是我应该坚持下去的一个原因吗?

Bro*_*cco 658

ES5,ES6和TypeScript之间的决策树

你介意做一个构建步骤吗?

  • 是的 - 使用ES5
  • 不 - 继续

你想使用类型吗?

  • 是 - 使用TypeScript
  • 不 - 使用ES6

更多细节

ES5是您今天在浏览器中使用的JavaScript,它就是它的本质,并且不需要构建步骤将其转换为将在今天的浏览器中运行的内容

ES6(也称为ES2015)是JavaScript的下一个版本,但它不能在今天的浏览器中运行.有很多转发器会导出ES5以便在浏览器中运行.它仍然是一种动态(读取:无类型)语言.

TypeScript提供了一个可选的打字系统,同时从未来版本的JavaScript(ES6和ES7)中提取功能.

注意:很多转换器(即babel,TypeScript)将允许您使用今天的JavaScript未来版本的功能,并导出仍将在今天的浏览器中运行的代码.

  • @RaoulRubin这是真的,还有很多其他因素,但对于一个封闭的问题,它至少为决策过程提供了一个起点 (15认同)
  • 这不是那么简单.还有很多其他因素. (5认同)
  • @RavinderPayal有一个有趣的问题,Brocco.从市场的角度来看,TS与es5或es6的价值是什么? (3认同)
  • 好的,所以这篇文章已经有几年了.让我们快进到今天,即2017年9月28日.大多数浏览器都支持ES6吗? (2认同)

Ken*_*per 113

我一直在当前的角度项目中使用Typescript大约一年半,虽然定义中存在一些问题但是DefinitelyTyped项目在跟上最流行的库的最新版本方面做得非常出色.

说过从vanilla JavaScript转换到TS时有一定的学习曲线,你应该考虑到你和你的团队进行转换的能力.此外,如果您要使用角度1.x,您将在网上找到的大部分示例都需要您将它们从JS转换为TS,总体而言,目前使用TS和angular 1.x的资源并不多. .

如果您计划使用角度2,那么有许多使用TS的示例,我认为团队将继续提供TS中的大部分文档,但您当然不必使用TS来使用角度2.

ES6确实有一些不错的功能,我个人计划更熟悉它,但我不认为它是一种生产就绪的语言.主要是由于当前浏览器缺乏支持.有关详细信息,请参阅 SO答案.当然,您可以在ES6中编写代码并使用转换器将其转换为ES5,这似乎是目前最受欢迎的事情.

总的来说,我认为答案可归结为您和您的团队所熟悉的内容.我个人认为TS和ES6都有很好的支持和长期的期待,我更喜欢TS,因为你倾向于更快地获得语言功能,而且现在工具支持(在我看来)更好一些.

  • ES6没有浏览器支持?你是MS政治家吗?打字稿和ES6都需要一个转换器.意味着你没有在网上运行TS或ES6,而是使用像Babel这样的东西.TS加入Angular 2只是因为谷歌和MS的政治关系 (40认同)
  • @STEEL不是MS政治家你只是回答我一年前留下的答案,当时ES6的支持非常有限.你可以自由地认为TS和Angular 2的决定是政治性的,但这并没有改变我的观点,即它是为该语言编写的,Angular2团队正在鼓励使用它. (40认同)
  • 这是从2年前开始的,但时间已经证明了标准最终如何占上风.如今,大多数浏览器都大力支持ES6.类,箭头函数等.最终,我们将达到这样的程度,即浏览器本身会支持足够好的javascript版本,以便不需要使用转换器.打字稿总是需要一个转换器.为什么这很重要?因为作为网络开发人员,我们有责任推动网络发展,这是通过支持标准来实现的 (18认同)
  • 这是一个糟糕的ES6不支持实际的"编译时"类型安全.在ES6中有很多很棒的东西,但事实上我不能说"这个参数是一个字符串(或类X的实例),该死的"并且能够将这个验证作为构建过程的一部分仍然不利于大型程序(前端和后端都一样). (3认同)