2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

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

关注

评论

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

阿里巴巴十亿级并发系统设计:实现高并发场景下的稳定性和高性能

程序员高级码农

Java 程序员 高并发‘’

AI 乱写代码怎么破?使用 Context7 MCP Server 让 AI 写出靠谱代码!

Se7en

一家家具厂,如何用零代码搭建自己的 ERP ?

NocoBase

开源 低代码 零代码 ERP 家具行业

UX设计神器,Axure RP 9 让交互设计如此简单!

Rose

Redis可视化神器!Redis Desktop Manager 让数据库管理如此简单

Rose

MAMP PRO:一键搭建本地服务器

Rose

从信息传输到智能互动,融云的全球智能通信云服务进化

融云 RongCloud

开发者的终极选择!为什么顶级公司都在用DBeaver EE?

Rose

PAI-Model Gallery云上一键部署阶跃星辰新模型Step1X-Edit

阿里云大数据AI技术

人工智能 阿里云 模型部署 PAI 阶跃星辰

新一代质量管理QMS系统,产品质量全追溯

万界星空科技

质量管理 QMS 产品质量管理

云上玩转DeepSeek系列之六:DeepSeek云端加速版发布,具备超高推理性能

阿里云大数据AI技术

人工智能 阿里云 模型部署 PAI DeepSeek

苹果电脑免费截图工具:iShot for Mac

Rose

智能运维新标杆:OpsPilot如何通过RAG+Rerank突破LLM局限?

嘉为蓝鲸

智能运维 OpsPilot

智能加持:嘉为蓝鲸 WeOps 日志模块从记录到根因分析的跨越

嘉为蓝鲸

日志 智能运维 #WeOps

MCP Server 实践之旅第 1 站:MCP 协议解析与云上适配

阿里巴巴云原生

阿里云 Serverless 云原生 MCP

理工科 MCP Server 神器,补足人工智能幻觉短板

阿里巴巴云原生

阿里云 云原生

物流规划、仓储自动化和算法调度的问题分析

电子尖叫食人鱼

数据库 算法 运维

AI加持的修图革命!Lightroom 2024 智能调色一键惊艳

Rose

兼容Pioneer全系设备!rekordbox 完美衔接CDJ/DJM!

Rose

梦精灵提示词管理器:从构思到 Golang + wxt 框架开发落地

龙正哲

华为音乐走进西安交大“白鸽音乐节”,一起“碰”进春日音浪

最新动态

从代码迁移到AIGC:摩尔线程2050大会用全功能GPU解锁Z世代的科技脑洞

新消费日报

如何 “硬核” 应对关税风暴?

GPU算力

gpu 算力 高性能计算 GPU服务器 关税

一图纵览!嘉为蓝鲸2025春季 11 大产品矩阵智焕新能

嘉为蓝鲸

智能运维 DeepSeek

HarmonyOS SDK助力鸿蒙版今日水印相机,真实地址防护再升级

HarmonyOS SDK

harmoyos

当数学遇见AI!Wolfram Mathematica mac重新定义科学计算

Rose

程序员/设计师必备!Beyond Compare 4 让代码和设计稿对比一目了然

Rose

MCP 协议:为什么 Streamable HTTP 是最佳选择?

阿里巴巴云原生

阿里云 云原生 MCP

Cursor 最强竞争对手来了,专治复杂大项目,免费一个月

硅基新手村

vscode cusor

向量数据库与知识图谱:智能化运维的知识基石

嘉为蓝鲸

AIOPS 智能运维 DeepSeek

5 分钟搞定防御性编程:打造稳健的软件

俞凡

架构 最佳实践

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