社区质疑 TypeScript 与编译为 JavaScript 的语言

  • Harry Brumleve
  • 臧秀涛

2012 年 10 月 29 日

话题:JavaScript语言 & 开发

微软近期发布了编程语言 TypeScript,这在 JavaScript 社区引起了轩然大波。来自雷德蒙德的这一新生事物会将一种专有的、类型安全的语言解释为 JavaScript,从而使开发者能够利用 JavaScript 的功能,同时降低了掌握 JavaScript 语言本身的必要性。软件社区对这门新语言反应各异,有些人欣然接受以 TypeScript 的方式编写类型安全的 JavaScript,而其他人则质疑所有编译成 JavaScript(Compile-to-JavaScript)的语言是否有必要存在。

最初,随着 TypeScript 的发布,如 DevProConnections 等很多和.Net 比较友好的新闻媒体做了大量宣传。DevProConnections 网站的定期撰稿人 Michael K. Campbell 对于TypeScript 的未来表现出了公正但更显积极的立场。Campbell 总结到,这种应用开发风格代表着 JavaScript 在逻辑上已经成熟,可以将 TypeScript 的发布看作一次正式宣告,JavaScript 已经安全地从浏览器进入桌面与后台服务的开发领域。

我忍不住想象 TypeScript 的光明未来。当我想到相对于支持 API 的后端 Web 服务(如 Microsoft's ASP.NET Web API framework),Web 开发日益向重度依赖具有动态页内渲染能力的 JavaScript 的架构发展,我就对 TypeScript 的未来特别兴奋。

有的开发者希望利用 JavaScript,而又不想投入太多时间。这些开发者发现,吸引他们采用 TypeScript 的原因并不是只有类型安全性。TypeScript 提供了一种基于类的面向对象编程模型,这吸引了一些 C# 和 Java 风格语言的开发者。英格兰柴郡的一位软件开发者 Danny Tuppeny 写到,TypeScript 的这一特性让他可以利用 JavaScript 的功能,而不需要掌握基于原型的面向对象语言的相关基础知识。

我对程序集或 IL 并没有太多了解。当然,某些情况下多了解一些会很有用,但是相对于把时间投入到我日常使用的 C# 或其他技能上,投入到程序集或 IL 上真的值得吗?

如果 TypeScript 能帮我拼装 JavaScript 的子类原型,就算我自己不会用 JavaScript 实现,这有什么关系吗?没关系。理解生成的代码对我有帮助吗?当然有。但这是必须的吗?并不是。重要的是理解它是如何工作的以及有何限制。同样道理,编写 C# 代码时我也不需要百分之百地理解生成的 IL。

不过,TypeScript 只是编译为 JavaScript 的一族开发语言中的最新成员。 去年出现的 Dart 绕过了 JavaScript 的缺点,而且带来了健壮性更好、生产力更高的 Web 开发体验。相对于 JavaScript,这两种语言的语法都更为健壮,如都具有类型安全性;它们的相似性远远不是一个是另一个的山寨这么简单。

微软的 Web 开发者工具架构师 Scott Hanselman 在推销 TypeScript 的同时也质疑将它与 Dart 对比的必要性,他指出这两种语言是以不同方式开发的,而且其核心也存在根本差异。

有人拿 TypeScript 与 Dart 对比,这就像拿苹果跟化油器比。TypeScript 构建于 JavaScript 之上,因此没有 JS 互操作问题。而 Dart 是一个从头开始设计的原生虚拟机。Dart 可以与 JavaScript 互操作... 但它并不是 JS。比如说,Dart 中甚至不能使用 JavaScript 的 Number 类型。

Dart 团队的开发者 Shannon -jj Behrens 强调了这一区别,并表示欢迎 TypeScript 加入编译成 JavaScript 的语言这一大家族。Dart 团队认为,因为对 JavaScript 的依赖,TypeScript 采用的是老式的、容易出现编程错误的技术,他们很快就能超越这一竞争者。这也解释了他们为什么要鼓励微软围绕 JavaScript 代码库继续努力。

现在我们有机会看一下 TypeScript,Dart 团队非常欢迎 TypeScript 团队进入这一社区。如果你已经有了规模庞大的 JavaScript 代码库,或者已在使用 Visual Studio,我们认为 TypeScript 对你的项目是很好的补充。

并不是所有的人都认同替换 JavaScript 或者用不同的语言来包装 JavaScript 的理念。NCZonline.net 的 Web 工程师和博主 Nicholas C. Zakas 质疑到,如果把同样的精力投入到 JavaScript 上可以得到一样的结果,那编译为 JavaScript 的语言是否值得学习呢。

我认为编译为 JavaScript 的语言是实现这一目标的障碍。我们应该说服更多的人来学习 JavaScript,而不是给他们更多去选择放弃 JavaScript。我常常在想,如果所有的团队和公司将花费在这些替代品上的时间、精力、人力和金钱都用在改进 JavaScript 及其教学上,情况会怎么样呢?

Yahoo 的高级 UI 原型设计师 Marco van Hylckama 回应到,他感觉很多 JavaScript 开发者宁可将精力放在那些干脆抛弃 JavaScript 的现有技术上,也不愿意努力学习 JavaScript 语言本身。Hylckama 在其 Twitter 账号上质疑 TypeScript 和编译成 JavaScript 的这类语言的必要性。

不,不... http://www.typescriptlang.org/ 到底为什么我要用另一种语言编写代码再将其编译为 JavsScript 呢?

位于伦敦的一家 UI 开发公司——Neave Interactive——通过其 Twitter 账户从另一个角度探讨了这一主题,该公司质疑是否对 JavaScript 的学习困难到要使用替代品或通过其他编译为 JavaScript 的语言来抽象的地步了:

JavaScript 真的这么可怕吗?先是 CoffeeScript、Dart,现在又来了 TypeScript。

虽然所有的支持者、批评者和竞争者都在表达自己的观点,但毋庸置疑的是,TypeScript 在软件开发领域正越来越受欢迎。目前人们认为 JavaScript 不仅是一种可行的 Web 前端解决方案,也能用于创建桌面应用程序,还能开发可靠的服务端产品。OSS Watch 的作者之一 Mark Johnson 指出,JavaScript 使用场景的增加很可能会加剧对 JavaScript 开发者的需求,而且随着这种需求的上升,TypeScript 和 Dart 等语言的使用机会也相应增长

随着支持使用 JavaScript 编写跨平台的游戏和应用的工具的增多,以及像 Windows 8 和 Open WebOS 这样的平台将 Web 技术推向桌面,对于 TypeScript 所提供特性的需求只会越来越多。

查看英文原文Community Questions TypeScript and Compile-to-JavaScript Languages


感谢侯伯薇对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

JavaScript语言 & 开发