我应该使用打字稿吗?或者我可以只使用ES6?[关闭]


286

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


11
您不需要每次都有新的定义文件。如果要使用没有类型的库,declare var MyNewLibraryName: any;则可以编写,然后随意使用它,而不会引起编译器的抱怨。
David Sherret

2
在投票结束这个问题之后,我建议您询问与每种方法相关的更多利弊,而不是询问哪种方法最好,这是您在索取信息而不是征求意见。
Brocco

typescript在所有主要浏览器之前都会更新javascript新版本功能,我的选择是使用typescript并根据您的目标浏览器编译为javascript版本。(当然,甚至很容易将javascript一个版本移植到其他版本)
bhv

如果您不希望能够正确整理代码,并且希望Immutable.js真的很难使用,并且喜欢编写样板,并且认为DRY被高估了,那么您实际上更喜欢重复自己,并且喜欢为其他人的代码编写类型定义,并且喜欢管理在您下面更改的类型,并且喜欢在两个不同的文本编辑器之间进行切换,因为那里的文本编辑器无法正常工作,然后选择Typescript。但是,如果您理智,请选择ES6 / 7和Babel。
gargantuan

Answers:


114

我在当前的角度项目中使用Typescript已有大约一年半的时间,尽管现在每次定义都有一些问题,然后DefinitelyTyped项目在跟上大多数流行库的最新版本方面做得非常出色。

前面已经说过,从原始JavaScript过渡到TS时有明确的学习曲线,您应该考虑自己和团队进行过渡的能力。另外,如果您要使用angular 1.x,则在网上找到的大多数示例都需要您将它们从JS转换为TS,并且总体而言,目前并没有太多资源将TS和angular 1.x一起使用。

如果您打算使用angular 2,则有很多使用TS的示例,我认为该团队将继续提供TS中的大多数文档,但是您当然不必使用TS来使用angular 2。

ES6确实具有一些不错的功能,我个人计划对其进行更熟悉,但目前我不认为它是可用于生产的语言。主要是由于当前浏览器缺乏支持。当然,您可以在ES6中编写代码,并使用编译器将其升级到ES5,这似乎是现在很流行的事情。

总的来说,我认为答案将取决于您和您的团队对学习的舒适程度。我个人认为TS和ES6都将具有良好的支持和长远的前景,我更喜欢TS,尽管因为您倾向于更快地获得语言功能,并且现在工具支持(在我看来)要好一些。


40
ES6没有浏览器支持?您是MS政客吗?打字稿和ES6都需要一个翻译器。意味着您不是在网络上运行TS或ES6,而是在使用Babel之类的东西。TS加入Angular 2只是为了与Google和MS建立政治关系而增加
STEEL

40
@STEEL不,您不是MS政客,您只是在回答我一年多以前在ES6支持非常有限时留下的答案。您可以自由地认为TS和Angular 2的决定是政治性的,但这并不能改变我的观点,即它是针对该语言编写的,并且Angular2团队正在鼓励使用它。
肯特·库珀

18
这是两年前的事,但时间证明了该标准最终是如何流行的。如今,大多数浏览器都原生支持ES6。类,箭头函数等。最终,浏览器将本机支持足够不错的javascript版本,从而无需编译器。打字稿将始终需要翻译器。为什么这很重要?因为推动Web向前发展是我们作为Web开发人员的责任,那就是通过支持这些标准
monzonj

3
ES6简直太糟糕了,不支持实际的“编译时间”类型的安全性。ES6中有很多很棒的东西,但是我不能说“此参数是字符串(或X类的实例),该死”,并且能够在构建过程中进行验证的事实仍然不利于大型程序(前端和后端都一样)。
布拉德·皮博迪

如果确实需要,可以使用Flow Type之类的工具向ES6添加类型支持。在所有浏览器中无处不在ES6之前,您的工具链将由Flow-> ES6-> Babel组成,该过程具有很多间接性,但确实起作用,并且我认为这是当前非常流行的链。
Prahlad Yeri

660

ES5,ES6和TypeScript之间的决策树

您介意建立步骤吗?

  • 是- 使用ES5
  • 否-继续前进

您要使用类型吗?

  • 是的- 使用TypeScript
  • 否- 使用ES6

更多细节

ES5是您现在所知道并在浏览器中使用的JavaScript,它就是它的本质,不需要构建步骤即可将其转换为可以在当今的浏览器中运行的东西

ES6(也称为ES2015)是JavaScript的下一个迭代版本,但是它不能在当今的浏览器中运行。有很多编译器将导出ES5以在浏览器中运行。它仍然是一种动态(阅读:无类型)语言。

TypeScript提供了可选的键入系统,同时从将来的JavaScript版本(ES6和ES7)中引入了功能。

注意:那里的许多编译器(即babel,TypeScript)将使您可以使用当今JavaScript未来版本中的功能,并导出仍可在当今浏览器中运行的代码。


5
这不是那么简单。还有很多其他因素。
RaoulRubin '16

16
@RaoulRubin没错,还有很多其他因素,但是对于这里的一个封闭问题,至少为决策过程提供了起点
Brocco

1
PS-ES6 + FlowType = Love :)
Red2678 '16

3
@RavinderPayal有一个有趣的问题,Brocco。从市场角度看,什么 TS的VS ES5或ES6和东西沿着这些线路的价值?
J.Wells '16

3
好的,所以这个帖子已经有两年历史了。让我们前进到今天,2017年9月28日。大多数浏览器都支持ES6吗?
杜威银行
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.