2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

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

关注

评论

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

让数字经济成滇中崛起增长极新引擎

CECBC

架构师实战营 模块七总结

代廉洁

架构实战营

网络攻防学习笔记 Day57

穿过生命散发芬芳

网络攻防 6月日更

浩若烟海事半功倍|利用Docker容器技术构建自动化分布式web测试集群Selenium Grid

刘悦的技术博客

Docker Python3 测试 单元测试 测试环境 selenium

元数据的管理

奔向架构师

数据库 大数据 数据资产

前端 JavaScript 中的三种 for 循环语句总结

编程三昧

JavaScript 大前端 for循环

在线sitemap链接提取工具

入门小站

工具

JavaScript学习(十一)---RegExp对象

空城机

JavaScript 大前端 6月日更

使用uni-admin搭建后台管理系统

代码哈士奇

uni-app uniapp unicloud uni-admin

区块链引发了一场独特的社会运动

CECBC

「SQL数据分析系列」11. 条件逻辑

Databri_AI

数据库 sql 逻辑 条件

为什么 Python 没有函数重载?如何用装饰器实现函数重载?

Python猫

Python

一步步设计版本控制系统

Java·课代表

git 版本控制 版本管理

企业级一站式大数据开发平台理论及实践

王知无

如何给岗位设计薪资结构?

石云升

股权 薪酬 职场经验 6月日更

页面制作的15个CSS技巧

devpoint

CSS css3 Flex 6月日更

使用SpringCloud的openFeign组件踩坑纪实

小江

dubbo Feign spring-cloud

硬刚Hive | 4万字基础调优面试小总结

王知无

使用uni-upgrade-center搭建APP更新系统(升级中心+应用升级)

代码哈士奇

uni-app uniapp unicloud uni-admin uni-upgrade-center

全网最详细XSS跨站脚本攻击,不是过来打死我!!

网络安全学海

程序员 网络安全 信息安全 XSS 漏洞修复

[译] D8 类库脱糖

Antway

6月日更

硬刚数据仓库|SQL Boy的福音之数据仓库体系建模&实施&注意事项小总结

王知无

嵌入方法在推荐系统中的应用(二十)

Databri_AI

推荐系统 嵌入

Linux之nl命令

入门小站

Linux

Data Mesh,数据网格的道与术

王知无

硬刚用户画像(一) | 标签体系下的用户画像建设小指南

王知无

大势已来,区块链的真正价值是什么?

CECBC

架构师实战营 模块七作业(王者荣耀商城的异地多活架构设计)

代廉洁

架构实战营

JAVA 面向对象 (十三)-- 关键字static

加百利

Java 6月日更

从2021钉峰会,看钉钉生态背后的强大赋能力

ToB行业头条

钉钉

APP 开发技术如何进行选型 ?

程序员海军

大前端 App 技术选型 APP开发

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