为什么有的项目用了typescript/webpack也用babel完成编译

Why do some projects that use typescript/webpack also use babel to finish compilation

我注意到一些使用 typescript 和 webpack 的 web 项目也使用 babel 来完成编译。比如他们用ts编译成ES2015,然后用babel编译成es5。为什么不直接用ts编译成es5呢?

是不是项目也有js需要编译,就全部用babel了?或者我错过了什么?

谢谢。

Why not just use ts directly to compile to es5?

我就是这么做的。

关于混合使用 Babel 和 TypeScript

两者结合使用没有任何缺陷。因为两者都这样做:

 (non js OR js) => standard js

你可以做到

 (non js OR js) => standard js => es5 

通过 TS -> JS -babel> ES5Babel -> JS -ts> ES5

人们这样做的原因是为了不同的语法支持:https://kangax.github.io/compat-table/

个人

如前所述。我不使用 Babel as I TypeSafety is big for me and don't need to use syntax that isn't yet type safe

这有几个可能的原因。

  1. 他们使用 Babel 来自动填充 - TypeScript 只执行句法转换,让用户弄清楚他们需要哪些运行时库(例如 PromiseSymbol、等等)。这允许您决定这些 polyfill 的哪种实现最适合您,但这可能会很痛苦。 Babel 让你免于思考这个问题。这是一个权衡。
  2. 他们需要它来进行自定义转换 - TypeScript 有一个转换管道,但只有在您此时使用 TypeScript API 时才能访问它。如果您已经在使用 Babel 并想开始使用 TypeScript,但您已经在使用转换,这是一个合理的妥协。
  3. 它是在 TypeScript 不支持将生成器编译为 ES5 时创建的(甚至在 TypeScript 不支持 ES5 中的 async/await 时创建) - TypeScript 从 2.1 开始支持 ES5 中的 async/await,并且从 2.3 开始支持 downlevelIteration 标志后面的生成器。在此之前,用户经常依赖 Babel 来填补空缺,但现在不再需要 Babel。
  4. 它是在 Webpack 2 之前创建的,该项目使用特定的方式导入模块 - TypeScript 有一个 allowSyntheticDefaultImport 选项告诉 TypeScript 可以使用默认导入导入某些模块。 Babel 支持这种行为,但 Webpack 直到 Webpack 2 出来才支持。较新版本的 Webpack 不再需要 Babel。

这可能不是全部原因,但这是我能想到的一些原因。

Typescript 是从 OM ES2016 开始进化而来的。 Typescript 帮助来自 c# 和 java 背景的开发人员成为使用各种工具的 javascript 开发人员。 Visual Studio 代码、WebStorm、Sublime 等

原因:我们不能单独使用 Typescript 将 ts 转换为 ES5 使用 TypeScript 编译为 ES5 并不像使用 Babel 那样完整。某些现代语言特性,例如 Array.prototype.find,无法使用 TypeScript 编译为 ES5。

link 可以帮到您:https://www.stackchief.com/blog/TypeScript%20or%20Babel%3F