TypeScript的崛起

2015 年 4 月 13 日

TJ VanToll NativeScript 母公司 Telerik 的一名开发人员,同时也是 jQuery 团队的一名成员及《 jQuery UI in Action 》一书的作者。近日,他在 Telerik 开发者博客上发布了一篇文章,分析TypeScript 崛起的原因。

他在文章开头指出,Angular 团队之所以决定 Angular 2 从 AtScript 迁移到 TypeScript 是因为 JavaScript 社区的工具和框架更新缓慢。Angular 并不是唯一使用 TypeScript 的项目。就在 Angular 宣布迁移到 TypeScript 当天,Telerik 发布了 NativeScript 公开测试版,它的核心JavaScript 框架 CLI 均是用 TypeScript 编写的。TypeScript 因此获益匪浅,下图是过去几个月中的谷歌搜索趋势:

可以看出,与同它有竞争关系的 compile-to-JavaScript 框架 CoffeeScript 和 Dart 相比,其搜索热度明显上升。

JavaScript 应用如此广泛,许多具有不同编程背景的开发人员都创建了更适合其应用场景的 JavaScript,TypeScript 并不是第一个做这种尝试的。CoffeeScript 团队维护了一个列表,上面竟然有250 多种可以编译成JavaScript 的语言。VanToll 认为,与它们相比,TypeScript 主要有以下几点不同。

第一,TypeScript 具有可选性。Compile-to-JavaScript 框架通常可以分为两类:一类基于JavaScript;另一类完全抛弃JavaScript。TypeScript 属于前者。它是JavaScript 的一个超集,也就是说,开发人员可以将现有的.js 文件重命名为.ts 文件。这与CSS 处理器SASS 或LESS 类似。

TypeScript 包含一个可选的类型系统,即允许开发人员根据需要决定是否使用类型。例如,下面的 TypeScript 代码定义了两个数值型变量,然后用它们计算面积:

复制代码
var height : number = 2;
var width : number = 3;
console.log( "Area is: " + ( height * width ) );

在这种情况下,没有必要使用类型,因为变量的用途很明显,而且 TypeScript 可以从等式右侧推断出类型。但在下面这样的情况下,使用类型就相当有必要:

复制代码
function calculateArea( height: number, width: number ) : number {
return height * width;
}
console.log( calculateArea( 2, 3 ) );

上述代码中的三个 number 声明可以告诉 TypeScript 及其他开发人员该函数的参数类型和返回值类型,前者可以据此进行编译时类型检查,后者可以据此知道函数用法。除了类型外,TypeScript 还提供了模块接口,开发人员均可以根据需要决定是否使用它们。

第二,TypeScript 与ECMAScript 兼容。TypeScript 一直承诺支持最新ECMAScript 特性,因此,开发人员不必担心使用了一种不合标准的语言。年初发布的 TypeScript 1.4 已经支持 let 和 const 关键词,并支持 ES6 模板字符串。即将发布的1.5 版本会支持解构、“展开操作符(spread operator)”等更多ES6 特性。不过,在支持ES6 新特性方面,TypeScript 落后于 Babel Traceur ,后两个项目的目标就是尽可能多地支持 JavaScript 新特性。

第三,TypeScript 有良好的工具支持。以前,只有 Visual Studio 提供 TypeScript 工具。现在,情形大为改观。 WebStorm 最近增加了 TypeScript 支持 Eclipse 也有了 TypeScript 插件,而且微软正在为Sublime Text 开发TypeScript 插件

此外,VanToll 还特别指出,TypeScript 声明文件是他最喜欢的一个特性。 DefinitelyTyped 库包含了数以百计现有库的声明文件。它们非常受欢迎,像 Facebook Flow 这样的静态类型检查器也正在考虑使用它们。实现代码补全功能也是其用途之一。

上述任意一点都不足以使TypeScript 与众不同,比如Dart 也有一个可选的类型系统,也有一些语言是基于JavaScript 构建,但三者兼备是TypeScript 的竞争力所在。

但是,目前还没有任何compile-to-JavaScript 语言成为主流。在 TIOBE 编程语言排行榜上,前 50 名内没有一门 compile-to-JavaScript 语言,CoffeeScript 和 Dart 位列 50 到 100 名之间,而 TypeScript 甚至都没上榜。而且, CoffeeScript 也有许多优点,在 Ruby 社区中也很受欢迎,但它依然不能冲出 Ruby 生态系统成为主流。

即便如此,VanToll 认为,TypeScript 有成为主流的潜力和希望。除了前述特性外,TypeScript 还有一个不同之处在于背后有微软和 Angular 的支持。他们各有一个庞大的开发者社区,如果 TypeScript 能够得到这两个社区的用户的认可,那么它可能会成为第一个 compile-to-JavaScript 主流框架。


感谢徐川对本文的审校。

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

2015 年 4 月 13 日 07:487133
用户头像

发布了 1008 篇内容, 共 307.1 次阅读, 收获喜欢 272 次。

关注

评论

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

应用程序研发之网络-分层模型

superman

C++编译过程 宏 内联和静态变量

大规模数据处理学习者

程序的机器级表示-访问数据

引花眠

Jenkins 多分支项目过滤及 when 的高级用法

jerry.mei

DevOps 运维 自动化 jenkins CI/CD

应用程序研发之网络-网络编程模型

superman

门面效应 - 拒绝别人会产生愧疚吗?

石云升

心理学 门面效应 留面子效应

架构师课程第八周 作业

杉松壁

周末在家加班开发代扣支付网关!

诸葛小猿

加班

应用程序研发之网络 - Http

superman

第8周-作业1

seng man

封装element-ui表格,我是这样做的

前端有的玩

Java Vue Element 封装

数据结构和算法-链表

jason

JDK1.8新特性(六):Stream的终极操作,轻松解决集合分组、汇总等复杂操作

xcbeyond

stream 集合 新特性 JDK1.8 Collections

架构师训练营第八周课后总结

Cloud.

ARTS打卡 第9周

引花眠

ARTS 打卡计划

【架构师训练营 - 作业 -8】

小动物

安全系列之——手写JAVA加密、解密

诸葛小猿

对称加密 加密解密 非对称加密 rsa AES

LeetCode题解: 206. 反转链表,JavaScript,容易理解的递归解释,详细注释

Lee Chen

LeetCode 前端进阶训练营

第8周作业

小胖子

第8周-作业2

seng man

ARTS Week9

时之虫

ARTS 打卡计划

计算机的时钟(二):Lamport逻辑时钟

ElvinYang

轻松应对并发问题,Newbe.Claptrap 框架中 State 和 Event 应该如何理解?

newbe36524

分布式 微服务 架构设计 .net core ASP.NET Core

MySQL主从复制详解

Simon

MySQL 主从复制

架构师训练营第八周课后题

Cloud.

从零开始写一个迷你版的Tomcat

简爱W

MySQL 百万级数据量分页查询方法及其优化

xcbeyond

SQL优化 数据库优化

5万字长文:Stream和Lambda表达式最佳实践-附PDF下载

程序那些事

Java jdk Lambda stream

读完《云原生架构白皮书》,我们来谈谈开放应用模型(OAM)

郭旭东

Kubernetes 云原生 OMA

ARTS 打卡(2020.07.13-2020.07.19)

小王同学

ARTS 06 - Jenkins 多分支项目过滤及 when 的高级用法

jerry.mei

学习 算法 ARTS 打卡计划 CI/CD ARTS活动

TypeScript的崛起-InfoQ