直播预约通道开启!2021腾讯数字生态大会邀您共探产业发展新机遇! 了解详情
写点什么

TypeScript 2.1 发布

2016 年 12 月 14 日

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:002377
用户头像

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

关注

评论

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

元素XPATH定位点击为什么老失败?

小小娃爱吃甜食

Python 自动化 测试 selenium

Volcano社区正式发布v1.2.0版本

华为云原生团队

人工智能 开源 AI 云原生 开源项目

【经验分享】如何释放企业CMDB价值?——CMDB建设路径浅谈

嘉为蓝鲸

运维自动化 配置中心 CMDB 配置信息 配置管理

为何每次用完ThreadLocal都要调用remove()?

Java王路飞

Java 程序员 面试 JVM 内存泄漏

思科设备漏洞 CVE-2018-0171 的快速修复

冯骐

Python 运维 安全 网络 交换机

Spring Boot+Maven实现车牌训练、识别系统

不脱发的程序猿

maven Spring Boot 图像处理 28天写作 车牌训练、识别系统

Golang 中的并发限制与超时控制

冯骐

golang 并发 超时

Github疯传!阿里内部Java高级工程师面试突击笔记全网首发,这也太香了吧

程序员小毕

Java 面试 分布式 微服务 高并发

拍乐云加盟UCloud优云精选计划,构建云上的美好互动

拍乐云Pano

ucloud 云服务 RTC 拍乐云 白板

阿里架构师花近十年时间整理出来的Java核心知识pdf(Java岗)

周老师

Java 编程 程序员 架构 面试

区块链赋能电子合同!构建互联网可信生态整体解决方案

源中瑞-龙先生

3 月日更挑战|春日胜景,记录暖心每一天

InfoQ写作平台官方

活动专区 七日更 3月日更

【LeetCode】俄罗斯套娃信封问题Java题解

HQ数字卡

算法 LeetCode 28天写作

《精通比特币》学习笔记(第一章)

棉花糖

区块链 读书笔记

用 Nginx 的 auth_request 模块集成 LDAP 认证

冯骐

Python nginx 运维 ldap 认证

用 Go 写一个轻量级的 ldap 测试工具

冯骐

go golang 运维 开发 ldap

交换机配置的自动备份与变更告警

冯骐

Python 运维 网络 备份 multissh

在主动要求涨工资这事上,不要学我!从第一份工资800开始说起

四猿外

涨薪 工资 收入 程序员· 跳槽

炸裂!这份阿里P8大佬手写“Java核心技能精选”惨遭疯抢

Crud的程序员

Java 架构

从小厂逆袭快手,我是如何准备面试的

haxianhe

failure: repodata/repomd.xml from cloudera-manager: [Errno 256] No more mirrors to try

wjchenge

量化交易马特机器人(币掌柜/小树/小喜/瓦力)系统开发策略搭建

薇電13242772558

数字货币 量化策略

远程恶搞舍友电脑

大忽悠

3月日更

如何使用Excel表格精准分析PT100温度阻值关系?

不脱发的程序猿

28天写作 PT100 温度采集算法 Excel数据分析 传感器采集

用 Go 写一个轻量级的 ssh 批量操作工具

冯骐

golang 运维 SSH

Pgbouncer最佳实践:系列四

PostgreSQLChina

数据库 postgresql 软件 开源社区

智汇华云 | 深入理解Istio中的证书管理

华云数据

上云三问 | 京东云这次的大促有哪些“不一样”?

京东科技开发者

云主机 云安全

Open-Falcon 中的 LDAP 认证

冯骐

Python golang 运维 Open-Falcon ldap

面试官:如何用SpringCloud从零设计一个大型电商平台?

Java架构追梦

Java 架构 面试 微服务 SpringCloud

LeetCode题解:190. 颠倒二进制位,移动n,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

技术为帆,纵横四海- Lazada技术东南亚探索和成长之旅

TypeScript 2.1发布-InfoQ