【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论

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

再获认可!万里数据库参编中国信通院数据库研究报告 GreatSQL入选中国数据库产业图谱

GreatSQL

服务器安全设置Centos7 防火墙firewall与iptables

百度搜索:蓝易云

Linux centos 运维 防火墙 iptables

PyTorch模型容器与AlexNet构建

timerring

PyTorch

2023IKCEST “一带一路” 国际大数据竞赛重磅启动!

飞桨PaddlePaddle

人工智能 百度 paddle 飞桨 百度飞桨

《面试1v1》开篇

JavaPub

Java redis elasticsearch 面试 计算机

DevOps流水线设计的最佳实践

DevOps在路上

DevOps jenkins Tekton gitlab ci 持续交付流水线

腾讯云AI绘画好不好用,与同类产品对比有何优势?来看看ChatGPT是如何回答的

牵着蜗牛去散步

腾讯云 腾讯 腾讯云AI绘画

TinyNG——开源Angular组件库,助力Web应用快速开发!

OpenTiny社区

CSS typescript angluar 前端ui组件库

QCN9074+QCN9024-wifi card realizes high-speed data transmission and network traffic management.

wifi6-yiyi

wifi6

C++之openFrameworks框架

二哈侠

Boundless Hackathon @Stanford 主题黑客松活动闭幕,一文回顾

威廉META

团队如何选择合适的Git分支策略?

DevOps在路上

git DevOps 分支管理 DevOps工具

MyBatis实现动态SQL更新

越长大越悲伤

Java mybatis mybatis的拦截器 Mybatis Plus

软件高效自动化部署:华为云部署服务CodeArts Deploy

华为云PaaS服务小智

云计算 开发者 软件开发 华为云 华为开发者大会

openEuler 22.03 LTS登录AWS Marketplace

openEuler

Linux 操作系统 AWS openEuler 资讯

Linux安装jdk的详细步骤。

百度搜索:蓝易云

Java 云计算 Linux 运维 云服务器

Cnetos7系统如何实时屏蔽国外全部访问?

百度搜索:蓝易云

云计算 Linux centos 服务器 蓝易云

实操:用Flutter构建一个简单的微信天气预报小程序

没有用户名丶

《面试1v1》HashMap

JavaPub

Java jdk JVM hashmap

nginx启动命令和停止命令。

百度搜索:蓝易云

nginx 云计算 Linux 运维 云服务器

悦数图数据库:图技术加速行业大模型智能化应用落地|WAIC 2023 精彩回顾

最新动态

HarmonyOS课程尝鲜计划,优享特权大礼包

HarmonyOS开发者

HarmonyOS

视频交友源码开发搭建平台用户资料功能:小功能有大用处!

山东布谷科技

软件开发 视频 实时音视频 源码搭建 交友

你以为搞个jenkins流水线每天跑,团队就在使用CI/CD实践了?

DevOps在路上

DevOps 持续集成 jenkins

Spring 中的父子容器是咋回事?

江南一点雨

Java spring

飞腾开发者平台上线龙蜥专区,为开发者提供硬核技术支持

OpenAnolis小助手

开源 开发者 生态 龙蜥社区 飞腾

Boundless Hackathon @Stanford 主题黑客松活动闭幕,一文回顾

鳄鱼视界

Centos7系统如何安装MySQL5.7数据库?

百度搜索:蓝易云

云计算 Linux 运维 云服务器 MySQL 5.7

悦数图数据库:图技术加速行业大模型智能化应用落地|WAIC 2023 精彩回顾

悦数图数据库

人工智能 图数据库 国产数据库 大模型 AIGC

多元融合:流媒体传输网络的全盘解法

阿里云视频云

云计算 阿里云 视频云

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