写点什么

TypeScript 1.7 发布:支持 async/await、模块化、多态 this 和求幂语法

  • 2015-12-04
  • 本文字数:1708 字

    阅读完需:约 6 分钟

伴随着 Visual Studio 2015 Update 1 的发布,TypeScript 1.7 也发布了,新版本默认支持 ES6 (ECMAScript 6) 的 async/await 以及模块化特性,支持多态“this”类型,支持 ECMAScript 2016 提出的求幂语法。详细的变更列表,可以查看 GitHub 上的路线图

和之前一样,用户可以通过 Visual Studio 2015 Update 1 Visual Studio 2013 NPM 或者直接通过源码来使用 TypeScript 1.7 。

Async/Await

在 1.7 版本中,用户能够在启用了 ES6 Generator 支持的目标上(例如 Node.js V4 及更高版本)使用 async 函数。而使用了 async 前缀的函数是异步函数,开发者可以在程序中使用 await 关键字来停止异步函数的执行,直到约定被满足为止。示例如下:

重要通知:接下来 InfoQ 将会选择性地将部分优秀内容首发在微信公众号中,欢迎关注 InfoQ 微信公众号第一时间阅读精品内容。

复制代码
"use strict";
// printDelayed is a 'Promise<void>'
async function printDelayed(elements: string[]) {
for (const element of elements) {
await delay(200);
console.log(element);
}
}
async function delay(milliseconds: number) {
return new Promise<void>(resolve => {
setTimeout(resolve, milliseconds);
});
}
printDelayed(["Hello", "beautiful", "asynchronous", "world"]).then(() => {
console.log();
console.log("Printed every element!");
});
</void></void>

Microsoft 正在努力将 TypeScript 中的 async/await 支持扩展到其他领域,包括浏览器这一并不支持 ES6 Generator 的领域。如果想要了解 async/await 的实现细节以及使用方法,可以查看博文《什么是 Async/Await》

多态 this 类型

在经过了大量的社区讨论和反馈之后,TypeScript 1.7 增加了一个新的多态 this 类型。开发者能够在类和接口中使用 this 类型,以表示某些类型是包含类型的子类型(而不是包含类型本身)。该特性能够让层级流式 API 这样的模式更加容易表达。

复制代码
interface Model {
setupBase(): this;
}
interface AdvancedModel extends Model {
setupAdvanced(): this;
}
declare function createModel(): AdvancedModel;
newModel = newModel.setupBase().setupAdvanced(); // fluent style works

如果想深入了解该关键字,可以查看 TypeScript Wiki

作为支持该特性的一部分,TypeScript 1.7 修改了 this 的类型推理逻辑。在一个类中,值 this 的类型将会被推断为 this 类型,用后续的原始类型值赋值会失败。作为一种替代方法,用户可以为 this 添加一个类型注解。使用替代方法的代码示例以及其他可能的重大变化可以查看GitHub。

ES6 模块

TypeScript 1.7 将 ES6 添加到了选项列表中,开发者能够使用–module 标记,当目标为 ES6 的时候指定模块化输出。这一特性为用户提供了更多的扩展性,让用户能够针对具体的运行时精确地指定特性。例如,现在能够以 Node.js v4 为目标,它并不支持 ES6 模块,但是支持一些其他的 ES6 特性。

复制代码
//tsconfig.json targeting node.js v4 and beyond
{
"compilerOptions": {
"module": "commonjs",
"target": "es6"
}
}

ES7 求幂运算

最后是一个小语法糖。ECMAScript 委员会最近将求幂运算符提议移动到了第三阶段。对于 Microsoft 来说这表示在 TypeScript 中采纳该特性的时机已经成熟,于是在 TypeScript 1.7 中添加了对它的支持。

复制代码
let squared = 2 ** 2; // same as: 2 * 2
let cubed = 2 ** 3; // same as: 2 * 2 * 2
let num = 2;
num **= 2; // same as: num = num * num;
Say goodbye to Math.pow()!

下一步计划

虽然 Microsoft 非常愉快地宣布了他们在该版本中做的所有提升,但是 Microsoft 也一如既往地关注社区的反馈。如果你对 TypeScript 的未来非常关注,那么 Microsoft 非常鼓励你检出已有的问题给他们提出pull request ,或者在 Gitter 上与 TypeScript 团队交流。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

2015-12-04 18:005032
用户头像

发布了 321 篇内容, 共 124.6 次阅读, 收获喜欢 19 次。

关注

评论

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

Tapdata 荣获2021中国创新势力榜“最佳数字中台企业服务品牌”大奖

tapdata

Tapdata 最佳数字中台企业服务品牌

耗时半年,堪称神迹!阿里架构师整合出258W字Java全栈面试题

Java架构追梦

Java 阿里巴巴 面试 java架构 跳槽

大数据训练营 - 第二次作业hadoopRPC

西伯利亚鼯鼠

lsyncd实现文件实时同步

阿呆

lsyncd

天不生我SpringBoot高级笔记 编程万古无常夜!

白亦杨

Java springboot

完美收官!字节4面斩下2-2Offer,入职就是30K16薪,全凭这套“面试+架构进阶知识点”pdf

Java 程序员 架构 面试

Realtime DB技术详解

安第斯智能云

数据

星环研发总监为你揭秘TDH8.0的前因后果 | TDH8.0 使用必读 3

星环科技

数据库 大数据 多模型数据

11道高频React面试题及详解,另附有React面试题集合

前端依依

面试 大前端 React

去中心化交易所搭建|区块链数字货币交易平台开发

Geek_23f0c3

APP开发 去中心化交易所系统开发 区块链、

第七届军博会圆满闭幕,数军科技多项成果获关注

科技热闻

百度内容风控是怎样在秒级之内完成词表匹配

百度Geek说

百度 内容审核

Uber 多区域 Kafka 的灾难恢复

奔着腾讯去

Apache kafka 分布式

爬虫入门到放弃03:爬虫如何模拟人的浏览行为

叫我阿柒啊

爬虫 代理IP user-agent

手把手教你,从零开始搭建Spring Cloud Alibaba!这份笔记太牛了

智汇华云|安超云套件Archer Cloudsuite为“信创强国”筑基

华云数据

如何保障服务器承受亿级流量(12)【限流】

我爱娃哈哈😍

架构设计 架构设计实战

干货 | 用JAVA实现多语言翻译组件

LigaAI

Java 国际化

Alibaba永远滴神!阿里内部最新Java基础到中高级核心知识手册

Java~~~

Java 编程 程序员 架构 面试

如何实现70%丢包下音视频的高可用 - 数据篇

ZEGO即构

音视频 数据处理 传输协议 弱网环境高可用 Qo

为什么电脑自带的录屏功能不好用?

淋雨

视频剪辑 Camtasia 专业录屏

2021InfoComm|钉钉会议 Rooms 的 "全场景" 智能化解决方案

阿里云CloudImagine

音视频 钉钉 视频会议 会议 会议室

有奖体验活动,最新1.3版本试用

Geek_6cdeb6

人工智能 机器学习 深度学习 学习 AI

网络攻防学习笔记 Day80

穿过生命散发芬芳

网络攻防 7月日更

解读新技术,解锁新玩法,HarmonyOS开发者日杭州站等你来参加

科技汇

技术实践 | 网易云信视频转码提速之分片转码

网易云信

专科程序员与本科程序员之间有什么区别?薪资待遇又差多少?

Java 编程 程序员 架构 面试

浪潮云说直播间,就在今天!

从零开始学习3D可视化之数据对接(1)

ThingJS数字孪生引擎

大前端 可视化 3D 3D可视化 数字孪生

Tapdata 与巨杉数据库完成产品兼容互认证

tapdata

Tapdata 巨杉数据库 产品兼容性互认

七种颜色的事件风暴法

escray

学习 极客时间 7月日更 如何落地业务建模

TypeScript 1.7发布:支持async/await、模块化、多态this和求幂语法_语言 & 开发_孙镜涛_InfoQ精选文章