TypeScript 4.0 已于上月正式发布。近日,外媒 ZDnet 则对 TypeScript 之父安德斯·海尔斯伯格(Anders Hejlsberg)进行了一则专门访谈,就 TypeScript 的发展历程进行了分享。
首先,Hejlsberg 提到了在 TypeScript 发展初期时微软内部对开源的态度。众所周知,微软的前首席执行官史蒂夫·鲍尔默(Steve Ballmer)曾公开的表达过 “Linux 是一种癌症”言论。他认为,Linux 威胁着微软的所有知识产权。而 Hejlsberg 则持不同意见,他认为 Linux 并不是 Windows 的威胁,“事实证明,它恰恰相反。”
Hejlsberg 称,早在 2010 年微软还在 Ballmer 的带领下时,他的团队就认为,开源战略是赢得 JavaScript 开发者的唯一途径。不过当时的他知道,想要在微软的总部将 TypeScript 作为一个开源项目推行,将会是很困难的一件事。
Hejlsberg 透露,一开始 TypeScript 其实只是一个简单的想法,一个想看看他们是否可以做得比 JavaScript 更好一点的想法。”我们建立了一些原型,并把它扔在了一起。但当时我们真的很清楚,我们吸引 JavaScript 社区的唯一方法就是开源。不过在当时的微软,这无疑是一个很破格的想法” 。
彼时的微软在 Ballmer 的领导下对开源持有一个”非常矛盾”且”害怕”的态度,Hejlsberg 的 TypeScript 团队也不可避免地在微软内部收到了抵制。”我们有点知道这是我们必须要做的事情,但我们没有做的经验。”
好在现如今,随着 TypeScript 项目日益成熟、微软开始大力拥抱开源,Hejlsberg 的 TypeScript 团队也终于不用再像之前一样如履薄冰了。
为什么要创建 TypeScript
TypeScript 孵化在一个有意思的阶段。彼时的谷歌 Chrome 浏览器,凭借其对 Web 标准的关注和一个名为 V8 的强大 JavaScript 引擎,已经成为了浏览器大战中的赢家。
Hejlsberg 回忆称,谷歌打造了一个非常高效的 JavaScript 引擎,JavaScript 的效率也大幅提升。每个人都开始意识到,浏览器将成为构建真正应用的地方。他说,当时的开发人员已经开始为浏览器构建庞大的 JavaScript 应用,并努力用 JavaScript 编写这些应用。
不过 Hejlsberg 认为,这种语言缺乏 modules、classes 等关键功能;重要的是,还缺乏在程序中通过规则创建秩序的 type system。而 TypeScript 的开发目的就是为了解决这些问题,为 JavaScript 构建更好的工具。此举的关键在于,要在语言中添加一个 type system,而不对 JavaScript 最受用户喜欢的那一部分内容造成影响。
于是,Hejlsberg 和他的团队决定建立一个 “erasable type system”,这个组件则使得 TypeScript 成为了 JavaScript 的超集。在编译时,TypeScript 会删除所有的 types 并将其返回给 JavaScript。
Hejlsberg 解释说,从某种意义上说,它是一个 type system,只存在于开发者体验期间,但在运行时它就消失了。不过在运行时,它能给你带来的只有好处,没有任何缺点。
TypeScript 的主要竞争对手是什么?
Hejlsberg 称,TypeScript 的唯一真正竞争对手是 JavaScript。因为这两种语言都是运行前端应用程序的必备语言,而 WebAssembly 却模糊了本机应用程序和浏览器应用程序之间的界限。
不过他也表示,JavaScript 并不是真正的竞争对手,“它是我们的孪生兄弟或另一个自我” 。由于 TypeScript 是 JavaScript 的超集,所以用户也可以将 JavaScript 视为 TypeScript 的子集。这意味着整个 TypeScript 工具链非常乐于处理 JavaScript 并在 JavaScript 之上提供所有服务。
Hejlsberg 认为,从某种意义上说,JavaScript 就像没有类型注解的 TypeScript。所以一种流行的使用 JavaScript 的方式是,人们不会直接在你的源代码中使用类型注解,而是将类型注解放在注释中(js.doc 注释),编译器则可以从这些注释中获得很多信息。
因此,在过去的几年中,Hejlsberg 和他的团队则一直在增强对 js.doc 注释的支持,从而增强了直接使用 JavaScript 的能力。