微软发布了 TypeScript 1.4 版本,即他们这个JavaScript超集的最新版本。除了支持新的TypeScript特性比如联合类型之外,他们还提供了编译到ECMAScript 6的目标模式。
一个期望值很高的特性就是联合类型。通常在JavaScript代码中,会在运行时动态检查函数参数来决定其行为。TypeScript的联合类型为这些场景提供了更好的类型检查机制。下面是官方声明中提供的例子:
function f(x: number | number[]) { if (typeof x === "number") { return x + 10; } else { // return sum of numbers } }
其中参数x就是一个联合类型,可以为number或者number数组。代码中能够使用typeof来检查类型,从而根据不同结果执行不同的操作。Facebook的JavaScript静态类型检查框架 Flow 也提供了类似的类型检查机制。
DefinitelyTyped项目 的贡献者John Reilly比较并展示了angular-route.d.ts 在TypeScript1.4前后的区别 ,他说:
虽然在TypeScript 1.4之前能够重载函数,但是并不能重载接口成员。这意味着要为这些属性建模就必须找到适合所有场景的最佳通用类型。这也就总意味着没有类型。这种方案虽然可行但无法为消费代码(Consuming Code)带来很好的类型安全性。
1.4版本也支持了ES6的let和const特性,不过它们只能在编译成ES6目标时使用。微软希望在未来的更新中以ES5为编译目标时也能支持此特性。能够编译成ES5的一个新ES6特性是基础字符串模板,它使用回勾号(键盘左上角数字1左边按键的字符)来定义这样的模板:
var width = 640; var height = 480; var areaDisplay = `The pixel count is ${width * height}`;
不过标签模板字符串(Tagged Template String)只有在以ES6为编译目标时才能被支持。
微软已经谈到TypeScript 2.0的目标是“完全支持ECMAScript 6标准”。版本1.4是一个重要的更新,但是后面还有很多事情要做。根据 Kangax ES6兼容表 ,TypeScript8%的兼容比例在竞争中明显落后。不过,TypeScript的目标不仅仅是ES6兼容性,它并不是像 6to5 那样做一个单纯的ES6转换器而是另有其它目的。
展望今后,TypeScript的 路线图 表明下个版本(1.5)将会支持for..of和解构(destructuring)。
TypeScript 1.4目前已经可以在 Visual Studio 2015 CTP5, Visual Studio 2013, NPM, 以及 TypeScript Playground 中使用。
查看英文原文: TypeScript 1.4 Released, Adds Union Types, More ES6 Features
感谢郭蕾对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。