硬核干货——《中小企业 AI 实战指南》免费下载! 了解详情
写点什么

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

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

关注

评论

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

【最新LR2023安装包】lightroom classic 2023-一键安装-永久使用-中文简体

Rose

Supersonic 推出游戏创意生成器,AI 助力激发开发者创作灵感

极客天地

Serato DJ Pro mac(专业DJ软件) v3.0.3中文激活版

Rose

能源公司 Turcomp 通过 NocoBase 实现敏捷、安全开发

NocoBase

开源 低代码 无代码开发 低代码开发

MATLAB R2023a中文版安装教程 MATLAB许可证密钥分享 Mac/win

Rose

数学软件 MATLAB R2023b破解版 MATLAB 密钥 MATLAB 安装教程

性能测试概念

测试人

软件测试

性能测试概念

测吧(北京)科技有限公司

测试

项目管理新利器!Project Office Pro助您精准规划,高效执行,项目成功不是梦

Rose

人工智能与聊天机器人:革新互动体验的新纪元

天津汇柏科技有限公司

聊天机器人 人工智能】

洞察消费者需求,实时监控商品信息是关键 —— 淘宝API的力量

技术冰糖葫芦

API Explorer API 编排 api 货币化 API 文档

文献解读-液体活检-第二十期|《连续循环肿瘤DNA检测可预测肝癌患者早期复发:一项前瞻性研究》

INSVAST

基因数据分析 生信服务 液体活检

瑞能半导体携多元成果打造全新“品牌基石” 驭领可持续篇章 为功率器件注入强劲动力

新消费日报

生而非凡:皮阿诺哈曼系列不锈钢橱柜打造致净厨房空间

新消费日报

实战攻略:如何用 TDengine 轻松搞定时序数据建模

TDengine

竖版H5摸鱼挂机游戏来啦!新版雷霆传奇详细图文架设教程

echeverra

雷霆传奇

鞋服品牌飞跃新纪元 智能商品管理软件五大颠覆性优势

第七在线

中英人寿呈现“ACE 中英事业家”优增品牌,谱写事业与生活共益共生绚丽华章

新消费日报

《软件设计哲学》:新“代码整洁之道”

京东科技开发者

设备指纹市场分析及未来展望

芯盾时代

终端安全 移动安全 风控系统

Mac虚拟机VMware Fusion Pro 13永久密钥 VM虚拟机 mac版下载安装教程

Rose

VMware Fusion Pro 13 Mac虚拟机 VM虚拟机密钥

性能测试概念

霍格沃兹测试开发学社

记一次大库大表的治理过程

京东科技开发者

DataBuilder2.3.2重磅发布,核心功能全面升级,引领数据治理新高度!

数造万象

数据治理 数据资产 数据开发 DataOps 版本升级

mesa LLVMpipe ORCJIT 上游化:一场历时两年的后端合并马拉松,幕后英雄竟是TA!

nn-30

Linux 开源 操作系统 risc-v 桌面

Perfectly Clear Workbench(图片编辑软件) v4.6.1.2678永久激活版

Rose

减少停机时间的最简单方法 — 避免单点故障

通明湖

一文了解大模型会话QA增强

神州数码

户外LED显示屏具备哪些性能?

Dylan

广告 LED显示屏 全彩LED显示屏 户外LED显示屏 led显示屏厂家

macOS 14 Sonoma系统下载安装 苹果最新14系统离线安装包

Rose

Glyphs 3 for Mac字体设计编辑工具下载安装

Rose

Mac 软件 字体设计 Glyphs 3 mac

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