【问题标题】:Should I use Traceur instead of Typescript to target ES5 but be ready for ES6我是否应该使用 Traceur 而不是 Typescript 来定位 ES5 但为 ES6 做好准备
【发布时间】:2014-05-14 15:17:41
【问题描述】:

我正在开发一个可以从 Typescript 中受益的大型代码库,但由于世界最终将转向 ES6,我是否应该将开发转向 Traceur?

我不想更改 Typescript 实现以针对 ES6(何时准备就绪),所以我现在的感觉是继续使用 Traceur。

谁能给点建议?

【问题讨论】:

  • 您对 ES6 语言特性或类型安全感兴趣吗? TypeScript 可以提供编译时类型安全,而 ES6 没有这样的概念。
  • @Jean-PhilippePellet 从 2014 年第三季度开始,我已经重新使用 TypeScript,因为我错过了编译时的安全性。
  • @Jean-PhilippePellet: nit-pick: TypeScript 非常有用,但它实际上并没有提供任何有意义的类型安全。
  • @AndreasRossberg 在查看您的个人资料后,我不确定我是否敢反驳您,但是例如,您会如何称呼防止字符串乘法?
  • @Jean-PhilippePellet,哦,还有很多其他事情会破坏 TS 中的健全性。例如,对(可变)对象进行子类型化:var x: {a:number} = {a: 0}; var y: {a:Object} = x; y.a = "boo"; x.a * 2.

标签: typescript traceur


【解决方案1】:

我绝对不同意 TypeScript 和 Traceur 如此不同的观点,TypeScript 是带有类型的 ES5,而 Traceur 大约是 ES6。

一方面,有一个兼容 ES6 的 TypeScript 2.0 in progress。另一方面,Traceur 中有几个功能在文档中标记为实验性,即types and annotations。事实证明,类型与 TypeScript 类型非常相似,而注解与 ES6 和 TypeScript 无关。所以 Traceur 更像是 ES6,并且已经有了它的名称:AtScript。是的,我们还有另一种语言扩展 :-)

Miško Hevery presentation 有一张漂亮的幻灯片展示了这里的实际情况,在 TypeScript 2.0 发布后完全有效:

所以无论你决定使用什么,重要的是要注意:它们是子集,你可以编写 ES5/ES6 JS,它是有效的 TypeScript 代码,你可以编写 TypeScript,它是有效的 AtScript 代码。

回到你的问题,我建议从 ES6 开始 使用关闭实验功能的 Traceur(现在非常稳定)并根据需要进行扩展,因为事实并非如此一个激进的决定,不会让你陷入困境,并为未来留出空间。

UPD: 在 2015 年初我还建议关注 6to5 项目(重命名为 Babel)作为 Traceur 的替代品。它运行速度非常快,并提供了一些不错的功能,例如生成代码的可读性以及对 node.js 和构建系统的更好支持。

【讨论】:

  • UPD2:AtScript 和 Typescript 正在合并,正如 ng-conf 2015 所宣布的那样,您将获得 Typescript 的好处 :) Typescript 也将用于创建 Angular 2,这意味着它将被另一个采用大项目
  • UPD3: 6to5 项目绝对值得一看,但最近才更名为Babel
  • 并非所有 ES5 代码都是有效的 TypeScript,尽管这种说法经常被提及。 function testFunc(a, b) { console.log(a); } testFunc('hello'); /* error */ testFunc('hello', 'goodbye', 'go away'); /* error */
【解决方案2】:

TypeScript 和 Traceur 具有完全不同的目标,并且在您尝试比较它们的方式上没有可比性。

TypeScript 是 EcmaScript 的超集,增加了严格的类型。它包含 ES6 的一些特性,但其主要目标是为语言添加严格的类型化(同时与 ES6 保持一致),而不是提供 ES6 支持。

相比之下,Traceur 是从未来的 EcmaScript 到当前的 EcmaScript 编译器。它不会为 EcmaScript 下一版本中尚未提议的语言添加任何内容。

如果您现在只想编写 EcmaScript 6,请使用 Traceur。如果您想要可选的严格类型以及随之而来的所有好处,以及一些 ES6 功能,请使用 TypeScript。

【讨论】:

  • 我明白你的意思,但我不确定我会说它们是完全不同的目标。两者的主要目标之一是使开发人员更容易进行大规模应用程序开发。不要过度简化,但 TypeScript 认为强大的类型系统是其中的重要组成部分,而 ES6 则着眼于对语言未来的更全面的看法。
  • 相比之下,Traceur 是从未来的 EcmaScript 到当前的 EcmaScript 编译器。它不会为下一版本的 EcmaScript 提出的语言添加任何内容。 除了它……github.com/google/traceur-compiler/wiki/LanguageFeatures
  • @Clintm Traceur 的目标,从项目本身来看,是“一个 JavaScript.next-to-JavaScript-of-today 编译器”。除了 Annotations 提案之外,Traceur 所做的所有其他事情都是为 Harmony 提出的,并且要么在 ES 规范中,要么是 Harmony 稻草人,所以根据每个项目的既定目标,这个答案准确的。一个例外不会使更大的总体目标无效。
【解决方案3】:

仅供参考,正在开发的 typescript 的下一个版本(2.0)专注于 ES6 兼容性:http://typescript.codeplex.com/wikipage?title=Roadmap

此处更新帖子:

http://blogs.msdn.com/b/typescript/archive/2014/10/22/typescript-and-the-road-to-2-0.aspx

从 TypeScript 1.5 到 TypeScript 2.0

当我们展望 2.0 版本时,我们专注于两个目标: 除了我们的主要目标是为 JavaScript 带来好的工具 发展。首先是与 ES6 保持一致。与 ES6 对齐 允许 TypeScript 成为下一个 JavaScript 的超集,打开 使用新代码模式(如解构、字符串)的方式 模板、承诺、迭代器等,以及更多功能 TypeScript 已经支持,例如类和 lambda 函数。 我们还与 Flow 和 Angular 团队合作,以确保 TypeScript 是处理更广泛范围的最佳语言 库,包括声明性框架,如即将推出的 Angular 2.0 版本。

【讨论】:

  • 是的,我又回到了 TS 行列,特别是因为生成代码的质量。
  • 那个路线图是六个月前的,它使用了“与 ES6 对齐”这个短语,除非有人有更具体的信息,否则它是如此模糊以至于毫无意义。
  • @torazaburo 好吧,它也是 6 个月前发布的 ;),我刚刚用前几天 (10/22) 的博客更新了它
  • Psst,stackoverflow.com/review/suggested-edits/6075577 可能是一个很好的编辑,您可以将其纳入您的答案中。
【解决方案4】:

我绝对推荐走 ES6 路线。

对于其他遇到这个问题的人,去看看 tagtree 关于 ES6 特性的视频。

要查看模板 stringsarrow syntaxdesstructuring,请查看此free tagtree tutorial screencast,无需注册。

【讨论】:

    【解决方案5】:

    对于大型系统,我绝对推荐使用 typescript。

    当你有一个团队一起工作时,typescript 会给你现代计算机语言的所有好处 具有 es6 兼容性(基于 microsoft 路线图),但具有严格的键入和代码完成优势。

    【讨论】:

    • 你确定你知道 typescript 吗?看看 typescript 路线图:typescript.codeplex.com/wikipage?title=Roadmap - 与 ECMAScript 6 保持一致
    • 你说的是“给你”,而不是“将给你”在未来某个不确定的时间点到某个未知的程度。甚至没有人知道“对齐”是什么意思,尽管它肯定不意味着“完全兼容”,尤其是因为 TypeScript 的某些方面永远无法完全兼容。
    • 这不是我高兴的问题,而是 SO 读者获得准确信息的问题。 TypeScript 从未说过它打算与 ES6 兼容,正如我所提到的,在不改变其基本性质的情况下,它不可能存在的结构性原因。因此,实际上不正确说选择 TS 会给你 ES6 兼容性。 不会。路线图中的短语“与 ES6 保持一致”最好解释为“在可行的情况下采用 ES6 中的一些想法,例如理解和字符串模板,并可能/可能调整模块语法以使其看起来更像 ES6。”
    【解决方案6】:

    Traceur 和 Typescript 转译具有非常相似的功能,各有利弊。

    我认为要更深入地回答、分析和比较的主要问题是:“谁是它的支持者?”和“他们每个人的历史是什么?”。

    Q1:嗯,两家公司都是大型且信誉良好的公司,在技术和劳动力方面进行了大量投资,为他们的转译提供了未来。谷歌支持 Traceur,微软支持 Typescript。

    Q2.1:Google 一直是开源框架的坚定支持者,例如 Chromium(Google Chrome 的开源浏览器基础)和数以千计的免费 API,几乎全部基于开放标准。 Traceur 遵循同样的逻辑,采用 ECMAScript 6 规范的指导方针,对其进行预测并确保其在未来版本中的兼容性。

    Q2.2:Microsoft 有包含标准并将其扩展为专有的历史,在其平台上造成对客户的依赖,并且不尊重其他市场参与者标准化的共同愿景。 Typescript 的主要目标是使市场上的其他编译器与您的 JScript.NET 编译器的语法和功能兼容,而不是与 ECMAScript 6 兼容。任何提及 ECMA 都只是“蚂蚁的糖”。

    Typescript 的实时类型解析和高级代码完成对于小型项目来说是一个相当大的优势,但大型项目需要在架构定义期间做出正确的决定,否则整个项目可能会因编译器过时或停止而受到损害超出标准,取决于唯一的供应商。

    但是,ECMAScript 6 的许多功能只是在 Firefox 33 和 Chrome 38 当前版本(2014-10)上实现。

    http://kangax.github.io/compat-table/es6/

    【讨论】:

    • 我当然不是微软的粉丝(事实上,我为它的竞争对手工作),但我认为这种比较是不公平的,原因有很多。首先,向微软输入恶意,向谷歌输入好意与当前情况相悖,后者正迅速转向专有(许多提到的开放 API 现在已弃用),而前者转向开放。另一方面,比较 Traceur 和 TypeScript 是不公平的,因为 Traceur 不支持另一个版本的专有语言,而是即将到来的标准 ES6(还有其他转译器,例如 Babel)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多