写点什么

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

2012 年 10 月 29 日

微软近期发布了编程语言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 )关注我们,并与我们的编辑和其他读者朋友交流。

2012 年 10 月 29 日 23:482804
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 117.3 次阅读, 收获喜欢 26 次。

关注

评论

发布
暂无评论
发现更多内容

架构方法论之“极限审视法”

异想的芦苇

架构 方法论 设计思维

MySQL-技术专题-SQL性能分析

李浩宇/Alex

2020第十三届南京国际智慧工地装备展览会

InfoQ_caf7dbb9aa8a

技术革新的脉络及趋势

异想的芦苇

技术 进步

转型敏捷123

技术管理Jo

第3周学习总结

饭桶

SpringBoot 实战:如何优雅的处理异常

看山

springboot 实战 优雅响应

什么是 Kubeless?| 玩转 Kubeless

donghui

Kubernetes kubeless

手把手教你锤面试官 04——假装精通redis

慵懒的土拨鼠

SpringBoot-技术专题-@Async异步注解

李浩宇/Alex

2020南京国际工业互联网及工业通讯展览会

InfoQ_caf7dbb9aa8a

2020第十三届南京国际智慧停车展览会

InfoQ_caf7dbb9aa8a

从戚家军看组织战斗力塑造(组织的六脉神剑)

异想的芦苇

组织

数字货币交易所系统开发源码,交易平台搭建

WX13823153201

数字货币交易所系统开发

Java 客户端操作 FastDFS 实现文件上传下载替换删除

哈喽沃德先生

Java 文件系统 分布式文件存储 fastdfs 文件服务器

高难度对话读书笔记——目的篇

wo是一棵草

MySQL-技术专题-实战技巧

李浩宇/Alex

2020第十三届南京国际大数据产业博览会

InfoQ_caf7dbb9aa8a

“三段三域法”应用架构模型

异想的芦苇

架构 架构设计 技术架构

MySQL-技术专题-Join语法以及性能优化

李浩宇/Alex

万万没想到!ModelArts与AppCube组CP了

华为云开发者社区

AI 技术 华为云

轻言业务架构图

异想的芦苇

架构 企业架构 架构设计 架构设计原则 业务架构

我就不服了,看完这篇文章,5大常见消息队列开发你还学不会

小Q

Java 编程 程序员 开发 消息队列

PanDownload复活了!60MB/s!附下载地址

程序员生活志

PanDownload 网盘 下载器

晨间日记的奇迹

熊斌

读书笔记

架构师训练营第一期 - 第四周课后 - 作业二

极客大学架构师训练营

技术解码 | 玩转视频播放,自适应码流技术

腾讯云音视频

音视频 转码

第3周作业提交

饭桶

2020南京国际人工智能产品展览会

InfoQ_caf7dbb9aa8a

人工智能

Redis-技术专题-数据结构

李浩宇/Alex

深圳派发数字人民币红包!个人数字人民币钱包即将亮相

CECBC区块链专委会

数字货币 数字人民币

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

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