写点什么

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

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

关注

评论

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

【ELT.ZIP】OpenHarmony啃论文俱乐部——人工智能短字符串压缩

ELT.ZIP

人工智能 鸿蒙 数据压缩 ELT.ZIP

拆分电商系统为微服务

踩着太阳看日出

架构训练营

HashMap 源码分析-基础结构

zarmnosaj

5月月更

Bigdata 作业 第11周

Pyel

比特币价格预测两极分化:跌至1万美元还是涨至10万美元?

CECBC

【LeetCode】交换链表中的节点Java题解

Albert

LeetCode 5月月更

拆分电商系统为微服务

流火

【ELT.ZIP】OpenHarmony啃论文俱乐部——多层存储分级数据压缩

ELT.ZIP

鸿蒙 数据压缩 ELT.ZIP HCompress

AI简报-逆光也清晰-色彩增强算法CURL

AIWeker

人工智能 深度学习 5月月更 AI简报

Java Core「2」synchronized 关键字

Samson

学习笔记 5月月更 Java core

在线HTML转XML工具

入门小站

工具

提效客户体验管理:结合 K-Means 聚类和 RFM 模型的客户分群

龙国富

RFM 客户分群 K-Means

九、云原生链路追踪

穿过生命散发芬芳

链路追踪 5月月更

flask框架的学习笔记【二】

恒山其若陋兮

5月月更

微信朋友圈高性能架构设计

极客土豆

为了兼容IE,配置Babel+Webpack

空城机

webpack 5月月更

Nacos 开源之夏 2022 来了

阿里巴巴云原生

阿里云 开源 微服务 云原生 nacos

【ELT.ZIP】OpenHarmony啃论文俱乐部——电子设备软件更新压缩

ELT.ZIP

鸿蒙 rsync 数据压缩 ELT.ZIP

在线火星文转换器工具

入门小站

工具

单片机开发入门知识介绍

DS小龙哥

5月月更

计算机网络——物理层

工程师日月

计算机网络 5月月更

架构模块六

小马

「架构实战营」

《SaaS产品经理从菜鸟到专家》读书笔记

圣迪

产品 产品经理 SaaS tob tob产品

老板对技术部产出不满意怎么办?

石云升

产品思维 职场经验 管理经验 5月月更

架构实战营模块 6 作业

热猫

最好用的 8 款 React Datepicker 时间日期选择器测评推荐

蒋川

react.js 组件 组件库 低代码平台 Javascript框架

运动健康深入人心,MOVE PROTOCOL引领品质生活

BlockChain先知

聊聊我对质量度量的看法

老张

软件测试 质量保障

成本节省 50%,10 人团队使用函数计算开发 wolai 在线文档应用

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

阿里巴巴在 Envoy Gateway 的演进历程浅析

阿里巴巴云原生

阿里云 Kubernetes 云原生

拆分电商系统为微服务

大眼喵

「架构实战营」

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