AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

TypeScript 2.1 发布

  • 2016-12-14
  • 本文字数:1429 字

    阅读完需:约 5 分钟

TypeScript 是微软开发的一个 JavaScript 的超集,提供了最新的 JavaScript 特性以及可选的静态类型。近日, TypeScript 2.1 发布。该版本提供了功能更为强大的类型检查器,并且让开发人员可以编写出更简洁的代码。以下是该版本带来的主要新特性:

  • Downlevel async/await:虽然之前的版本已经提供了 async/await,但 downlevel async/await 让开发人员可以在 ES3/ES5 环境里使用该特性。
  • 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
};
  • Partial 类型:让开发人员可以创建现有类型的所有可选版本。此外,TypeScript 2.1 还提供了 Readonly、Record 和 Pick 等实用类型,感兴趣的读者可以点击这里查看它们的实现方式。

此外,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 )关注我们。

2016-12-14 18:002970
用户头像

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

关注

评论

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

模块二-微信朋友圈高性能复杂度分析

kk

架构实战营

实时数据湖:Flink CDC流式写入Hudi

王知无

ApacheCon 首次亚洲大会火热来袭,SphereEx 邀您共赴年度盛会

SphereEx

作业2-微信朋友圈高性能分析

Nullrable

架构实战课

模块二作业

seawolflin

架构实战营

架构实战营 - 模块二

绝影

架构训练营

架构实战营模块二 作业

酷飞不会飞

设计消息队列存储消息数据的 MySQL 表格——架构实战营作业八

开拓纪

架构师实战营 作业八

网络攻防学习笔记 Day78

穿过生命散发芬芳

网络攻防 7月日更

架构模块2

慕溶枫

#架构实战营

MapReduce案例(一)-- 流量统计

钱江兵

微信朋友圈高性能复杂度分析

gawaine

架构实战营

到底什么时候要分库分表?

卢卡多多

分库分表 7月日更

争议不断的动力电池暗战,究竟改变了什么?

脑极体

设计消息队列存储消息数据的MySQL表格

俞嘉彬

架构实战营

架构实战营模块二作业

Morphling

#架构实战营

一篇并不起眼的数据仓库面试题

王知无

架构实战营作业 M02

Shawn Liu

架构实战营

架构训练营-模块二

小卷儿

架构实战营作业七——王者荣耀商城异地多活架构设计

开拓纪

架构实战营 模块七

趣说开源|为什么要参与到开源社区中?

SphereEx

推荐一个软件--IObit Uninstaller

IT蜗壳-Tango

7月日更

多维数据分析(OLAP)技术选型(2):数据分析与OLAP差异

水滴

数据分析 OLAP 技术选型

Python OpenCV 图像的膨胀与腐蚀,图像处理取经之旅第 38 篇

梦想橡皮擦

7月日更

当我们在学习Hive的时候在学习什么?「硬刚Hive续集」

王知无

Spark SQL和DataSet(六)

Databri_AI

sql spark RDD

架构训练营模块 2 作业 - 听闻

听闻

架构实战营模块二作业

子豪sirius

架构实战营

微信朋友圈的高性能复杂度

伏波

架构实战营

标签体系下的用户画像建设小指南

王知无

作业二朋友圈高性能架构设计

王小森

TypeScript 2.1发布_JavaScript_谢丽_InfoQ精选文章