Babel和TypeScript的主要区别是什么?

53

我知道TypeScript是用来编写Angular2的,这可能使它成为想要涉足Angular2的人更好的选择,但当我看到Babel时,它看起来非常像TypeScript。

我注意到许多知名公司都坚持使用Babel。

以下是一些问题:

  1. 它们各自有哪些优劣势?
  2. 它们对于项目/开发人员来说是更好还是更差的选择?
  3. 它们之间的主要区别是什么,而这些区别又使它们独特呢?

3
一眼看上去就可以明显地看出它们是完全不同的工具。您可以花费15分钟阅读每个介绍来回答这个问题。 - Marty
1
TypeScript是一种编程语言,Babel则是一个工具(用于将ES6作为一种语言转译为ES5)。 - deceze
14
@Marty 两个编译器正在竞争,这个问题是合理的。 - Paleo
1
@Paleo 这似乎很不寻常,从我所看到的来看,它们的产品和目标非常不同。 - Marty
6
它们被用来做同样的事情:针对浏览器或Node.js的应用程序。新进入这个领域的团队都面临着同样的问题:哪种工具最适合他们的需要? - Paleo
这是TypeScript团队的详细答案:https://www.typescriptlang.org/docs/handbook/babel-with-typescript.html - 简而言之,如果您需要具有多个潜在输出的构建流程,请使用Babel进行转译并使用TSC进行类型检查 - Klesun
2个回答

70

TypeScript是JavaScript的超集,可以编译成普通的JavaScript(ES3+)。TypeScript的主要目标是使开发人员能够充分利用出色的静态类型功能。它适用于需要以下特性的大型应用程序:

  • 类型注释和类型推断。
  • 泛型。
  • 接口、枚举、命名空间、模块和类(后两者在ES6中可用)。
  • 安全重构。

据我所知,Babel只是将较新的ECMAScript功能转换为旧的ECMAScript环境支持的格式。它适合希望使用较新语言功能编写纯JavaScript的开发人员。


3
这是否意味着 TypeScript 既是将 ES6 转成 ES3+ 的转译器,又是 JavaScript 的超集,它添加了一些 JavaScript 没有的功能,而 Babel 只能将 ES6 转译成 ES5? - Thabo
14
现在Typescript支持纯JavaScript,所以真的没有理由再使用babel了。 - JoyalToTheWorld
1
@Marty:我想抱怨一下“是JavaScript的超集”。不,它不是。有很多有效的JavaScript代码在TypeScript中是无效的。TypeScript同时是JavaScript的超集和子集。 - Stefan Steiger
1
@StefanSteiger 这个评论来自TypeScript对自身的介绍(字面上是他们主页上的第二行),而不是我对它的特殊分析。 - Marty
@StefanSteiger 确实是超集,而不是子集。你提到的一些有效的 JavaScript 代码在 TypeScript 中无效,是由于默认的 TS 编译器选项(大多数人使用)造成的。你可以在编译器设置中放松限制,以便编译_任何_有效的 JavaScript,但你将失去一些鼓励更好的™代码的保护栏。 - Jacob Stamm

30

Angular 2开发人员之一 Victor Savkin 解释了为什么他们选择 TypeScript 而不是其他技术。

http://victorsavkin.com/post/123555572351/writing-angular-2-in-typescript

最后一个章节为什么选择TypeScript?

"现在前端开发者有很多选择:ES5、ES6(Babel)、TypeScript、Dart、PureScript、Elm等等。那么为什么选择 TypeScript 呢?

让我们从 ES5 开始。ES5 相对于 TypeScript 有一个明显的优势:它不需要转译器,这使得构建设置简单。您不需要设置文件监视器、转译代码和生成源映射。它只需要正常工作。对于许多小项目来说,这种简单性超过了 TypeScript 提供的高级重构和导航功能。您只需知道所有代码的位置和功能即可。

ES6 需要一个转译器,因此构建设置与 TypeScript 并没有太大区别。但它是一个标准,这意味着每个编辑器和构建工具都支持 ES6 或将支持它。

Elm 和 PureScript 是具有强大类型系统的优美语言,它们可以比 TypeScript 更多地证明有关程序的信息。用 Elm 和 PureScript 编写的代码可以比使用 ES5 写的类似代码更加简洁。

这些选项各有优缺点,但我认为 TypeScript 处于一个甜点,使它成为大多数项目的最佳选择。TypeScript 将好的静态类型语言的 95% 功能带到了 JavaScript 生态系统中。您仍然感觉自己在写 ES6:你继续使用同样的标准库、第三方库、同样的习惯用法和许多相同的工具(例如 Chrome 开发工具)。它为您提供了很多内容,而不会将您强制退出 JavaScript 生态系统."


3
2019年末报道。如今,如果您对用户使用的浏览器有所掌控——尤其是如果您不关心IE支持——那么ES6基本上不再需要编译器。 - Jacob Stamm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接