为什么有的项目用了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> ES5
或 Babel -> 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
这有几个可能的原因。
- 他们使用 Babel 来自动填充 - TypeScript 只执行句法转换,让用户弄清楚他们需要哪些运行时库(例如
Promise
、Symbol
、等等)。这允许您决定这些 polyfill 的哪种实现最适合您,但这可能会很痛苦。 Babel 让你免于思考这个问题。这是一个权衡。
- 他们需要它来进行自定义转换 - TypeScript 有一个转换管道,但只有在您此时使用 TypeScript API 时才能访问它。如果您已经在使用 Babel 并想开始使用 TypeScript,但您已经在使用转换,这是一个合理的妥协。
- 它是在 TypeScript 不支持将生成器编译为 ES5 时创建的(甚至在 TypeScript 不支持 ES5 中的
async
/await
时创建) - TypeScript 从 2.1 开始支持 ES5 中的 async
/await
,并且从 2.3 开始支持 downlevelIteration
标志后面的生成器。在此之前,用户经常依赖 Babel 来填补空缺,但现在不再需要 Babel。
- 它是在 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
我注意到一些使用 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> ES5
或 Babel -> 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
这有几个可能的原因。
- 他们使用 Babel 来自动填充 - TypeScript 只执行句法转换,让用户弄清楚他们需要哪些运行时库(例如
Promise
、Symbol
、等等)。这允许您决定这些 polyfill 的哪种实现最适合您,但这可能会很痛苦。 Babel 让你免于思考这个问题。这是一个权衡。 - 他们需要它来进行自定义转换 - TypeScript 有一个转换管道,但只有在您此时使用 TypeScript API 时才能访问它。如果您已经在使用 Babel 并想开始使用 TypeScript,但您已经在使用转换,这是一个合理的妥协。
- 它是在 TypeScript 不支持将生成器编译为 ES5 时创建的(甚至在 TypeScript 不支持 ES5 中的
async
/await
时创建) - TypeScript 从 2.1 开始支持 ES5 中的async
/await
,并且从 2.3 开始支持downlevelIteration
标志后面的生成器。在此之前,用户经常依赖 Babel 来填补空缺,但现在不再需要 Babel。 - 它是在 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