TypeScript是微软开发的一个JavaScript的超集,提供了最新的JavaScript特性以及可选的静态类型。近日, TypeScript 2.1发布 。该版本提供了功能更为强大的类型检查器,并且让开发人员可以编写出更简洁的代码。以下是该版本带来的主要新特性:
Object Rest&Spread:这是ES2017的一项新提案,让开发人员可以便捷地合并、拆解以及部分地复制对象。在使用类似 Redux 这样的库时,这一特性已经被广泛地使用。Object Spread让开发人员可以便捷地复制一个对象,如下所示:
let copy = { ...original };
类似地,我们可以合并多个不同的对象,如下所示,合并后的对象将同时具有foo、bar和baz的属性:
let merged = { ...foo, ...bar, ...baz };
开发人员也可以在合并后的对象中添加新属性。Object Rest是一个相对的过程,它可以排除特定的属性,如下所示:
let { a, b, c, ...defghijklmnopqrstuvwxyz } = alphabet;
keyof和Lookup类型:实际上,keyof操作符被称为“索引类型查询(index type query)”,它就像一个查询对象类型的键的查询,如下所示:
interface Person { name: string; age: number; location: string; } let propName: keyof Person;
上述代码也可以写成如下形式:
let propName: "name" | "age" | "location";
而Lookup类型被称为“索引访问类型(indexed access types)”,它看上去像访问一个元素,如下所示:
interface Person { name: string; age: number; location: string; } let a: Person["age"];
“映射类型(Mapped Types)”:这是TypeScript 2.1最令人感兴趣的特性。假如我们有一个Person类型,如下所示:
interface Person { name: string; age: number; location: string; }
如果我们希望以此为基础创建一个属性全为布尔值的类型,那么我们需要定义一个全新的类型:
interface BooleanifiedPerson { name: boolean; age: boolean; location: boolean; }
而借助映射类型,我们可以将BooleanifiedPerson定义为:
type BooleanifiedPerson = { [P in "name" | "age" | "location"]: boolean };
借助keyof操作符,上述代码还可以进一步简化为:
type BooleanifiedPerson = { [P in keyof Person]: boolean };
此外,TypeScript 2.1还放松了对程序包导入的检查,只要用户安装了就可以使用,TypeScript将不会再因为找不到相关的声明文件而提示错误。
感兴趣的读者可以通过 NuGet 获取TypeScript,也可以通过npm进行安装:
npm install -g typescript
Visual Studio 2015用户需要首先升级到 Update 3 ,再通过专门的 安装包 进行安装。 Visual Studio Code 或 Sublime Text 用户也可以根据相关的说明使用最新版本的TypeScript。
感谢陈兴璐对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号: InfoQChina )关注我们。