写点什么

TypeScript 2.3 添加了泛型参数默认值和异步迭代器等特性

  • 2017-05-04
  • 本文字数:1466 字

    阅读完需:约 5 分钟

TypeScript 2.3 扩充了语言的语法,添加的内容包括支持泛型参数(Generic Parameter)定义默认值,以及支持异步的生成器(Generator)与迭代器(Iterator)。它还提供了新的编译选项,并引入了对语言服务器插件的官方支持,意在改进与现有 JavaScript 代码的集成。

泛型参数默认值类似于函数参数的默认值,它使 TypeScript 的泛型语法更为灵活。举个例子,假定一个泛型函数支持如下三种不同的调用方式:

复制代码
declare function create(): Container<htmldivelement htmldivelement="">;
declare function create<t extends="" htmlelement="">(element: T): Container<t t="">;
declare function create<t extends="" htmlelement="" u="">(element: T, children: U[]): Container<t u="">;</t></t></t></t></htmldivelement>

如果使用泛型参数默认值,代码可以更紧致地编写成:

declare function create<t extends="" htmlelement="HTMLDivElement," u="T[]">(element?: T, children?: U): Container<t u="">;</t></t>对于函数参数默认值应符合的一系列规则,泛型参数默认值同样也应符合。例如,不允许在默认或可选(optinal)参数之后定义强制要求(required)参数、需要确保默认值满足所有类型参数上的约束等。

TypeScript 2.3 不仅能使用编译器标识--downlevelIteration以 ES3 和 ES5 为生成目标编译生成器和迭代器,而且添加了对异步迭代器和生成器的支持。与非异步迭代一样,异步迭代器也提供了 nextreturnthrow这三个方法。唯一的不同之处在于,异步迭代器返回的是一个Promise,而非实际的结果。例如:

复制代码
interface AsyncIterator<t> {
next(value?: any): Promise<iteratorresult><t>>;
return?(value?: any): Promise<iteratorresult><t>>;
throw?(e?: any): Promise<iteratorresult><t>>;
}
</t></iteratorresult></t></iteratorresult></t></iteratorresult></t>

异步生成器基于迭代器,是一种可生成部分计算结果的异步函数:

复制代码
async function* g() {
yield 1;
await sleep(100);
yield* [2, 3];
yield* (async function *() {
await sleep(100);
yield 4;
})();
}

与异步迭代器和生成器密切相关的是,TypeScript 2.3 还引入了for..await..of语句。该语句的功能类似于非异步迭代器中的for..of语句。例如:

复制代码
async function f() {
for await (const x of g()) {
console.log(x);
}
}

对异步迭代器和生成器的支持(包括for..await..of在内)是可选择加入的特性。启用时需要在--lib编译选项中添加esnext

为简化与遗留 JavaScript 代码工作,TypeScript 2.3 新增了一个编译器选项 --checkJs。具体而言,设置了--checkJs后,TypeScript 编译器也会对.js 文件报错。这样,开发人员能捕获尽可能多的错误,无需将他们的文件强制转换为.ts 文件。如果.js 文件中添加了// @ts-nocheck//@ts-check注释,那么--checkJs选项将会跳过对该文件的查错。虽然.js 文件不支持 TypeScript 类型标注,但是支持 JDoc 类型的标注,并将逐步转到支持 TypeScript。

另一个新的编译器选项是--strict标识,该标识意在简化开发人员对可用的最高层级类型安全的选取。--strict标识在使用tsc --init新建的项目中是默认使用的,它等价于:

  • --strictNullChecks
  • --noImplicitAny
  • --noImplicitThis
  • --alwaysStrict

最后一点,TypeScript 2.3 引入了一个语言服务器插件 API,意在通过加入 Angular 等模板系统及 TSLint GraphQL 等其它类型的内容,加大编辑器对 TypeScript 的支持,实现自动补全等高级特性。

查看英文原文: TypeScript 2.3 Adds Generic Default Arguments, Async Iterators Support, and More

2017-05-04 19:002135
用户头像

发布了 227 篇内容, 共 74.4 次阅读, 收获喜欢 28 次。

关注

评论

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

使用JPA + Eclipselink操作PostgreSQL数据库

汪子熙

eclipse 数据库 11月日更

【Java原理剖析系列】深度synchronized工作原理分析

洛神灬殇

java 11月日更

飞鹤乳业数智化转型之路

大咖说

云计算 数字化转型 数字化 企业上云

2020Android-目前最稳定和高效的UI适配方案!你头秃都没想到还能这样吧!

android 程序员 移动开发

双11在即,分享一些稳定性保障技术干货

老张

系统稳定性 大促 生产环境全链路压测

助力邯钢工业4.0!TDengine在深度(平潭)节水减排项目中的应用

TDengine

数据库 tdengine 后端

2020 国内互联网公司的Android工程师薪酬排名!看看你是什么水平

android 程序员 移动开发

JPA + EclipseLink + 云平台 = 运行在云端的数据库应用

汪子熙

数据库 Cloud Cloud Native 11月日更

用一套代码实现APP和小程序

Speedoooo

容器 移动开发 ios开发 APP开发 Andriod开发

2020 年需要关注的 5 大 Android 开发技术(1),Android知识总结

android 程序员 移动开发

2020Android面经,历时一个半月,斩获3个大厂offer,移动端开发工程师面试题

android 程序员 移动开发

基于Hive Connector的openLooKeng Connector 创建复用机制剖析

openLooKeng

大数据 hive 多数据源配置 计算引擎 openLooKeng

新版本发布!openLooKeng v1.4.0上线

openLooKeng

大数据 计算引擎 openLooKeng

恒源云(GPUSHARE)_U1S1,1年1度GPU云种草大会

恒源云

深度学习

2020Android 开发年度总结:“这一年里我到底做了些啥,面试阿里的时候一定会问到的

android 程序员 移动开发

模块三作业

doublechun

「架构实战营」

推荐!DevOps工具正越来越自动化

SoFlu软件机器人

TDSQL已助力20余家金融机构完成核心替换

腾讯云数据库

tdsql 国产数据库

2020-Android-面试重难点(万字篇),android屏幕适配的五种方式

android 程序员 移动开发

Hazelcast在openLooKeng中的应用(Cache篇)

openLooKeng

大数据 cache 计算引擎 openLooKeng

浅析openLooKeng安全认证机制

openLooKeng

大数据 ldap openLooKeng 安全认证

实用推荐系统:寻找有用的用户行为

博文视点Broadview

2020Android开发者学习路线(快速篇),分析android进程管理机制

android 程序员 移动开发

性能优化反思:不要在for循环中操作DB

CRMEB

超简单教程!自动部署openLooKeng

openLooKeng

大数据 计算引擎 openLooKeng 安装部署

TDSQL | 深度解读HTAP系统的问题与主义之争

腾讯云数据库

tdsql 国产数据库

云上远程运维的最后那点担心,“云梯”帮你解决

华为云开发者联盟

运维 华为云Stack 远程运维 安全可信 云梯

教你如何在Spark Scala/Java应用中调用Python脚本

华为云开发者联盟

Java Python spark JVM Spark Scala

TDSQL将发布免费版本,助力国产数据库生态完善

腾讯云数据库

数据库 tdsql

硬核干货!TDSQL全局一致性读技术详解|

腾讯云数据库

tdsql 国产数据库

2020 更新 - 腾讯 Android 面试 (已拿到月薪22K offer)

android 程序员 移动开发

TypeScript 2.3添加了泛型参数默认值和异步迭代器等特性_JavaScript_Sergio De Simone_InfoQ精选文章