TypeScript 4.9 beta 发布:鸽置的 ES 装饰器、satisfies 操作符、类型收窄增强、单文件级别配置等

TypeScript 4.9 beta 发布:鸽置的 ES 装饰器、satisfies 操作符、类型收窄增强、单文件级别配置等

TypeScript 已于 2022.09.23 发布 4.9 beta 版本,你可以在 4.9 Iteration Plan 查看所有被包含的 Issue 与 PR。如果想要抢先体验新特性,执行:

$ npm install typescript@beta

来安装 beta 版本的 TypeScript,或在 VS Code 中安装 JavaScript and TypeScript Nightly 来更新内置的 TypeScript 支持。

本篇是笔者的第五篇 TypeScript 更新日志,上一篇是 「TypeScript 4.8 beta 发布:正在路上的装饰器、类型收窄增强、模板字符串类型中的 infer」,你可以在此账号的创作中找到(或在掘金/知乎搜索 林不渡 ),接下来笔者也将持续更新 TypeScript 的 DevBlog 相关,感谢你的阅读。

另外,由于 beta 版本与正式版本通常不会有明显的差异,这一系列通常只会介绍 beta 版本而非正式版本。

鸽置的 ECMAScript 装饰器

在上一篇的 4.8 beta 中我们曾经说过,对齐 ECMAScript 的新版 TS 装饰器(相对于现在的 Experimental Decorators)实现正在路上,但在 4.9 beta 的日志中,Daniel Rosenwasser 表示由于新版装饰器提案中还存在一些需要讨论的细节,因此预计要在下一个版本,即 5.0 版本中才会得到实现。

但已经可以确定的是, --experimentalDecorators --emitDecoratorMetadata 这两个配置仍然会被保留,用于启用旧版装饰器,而新版装饰器无需配置即会默认支持。

非常合理,这么重磅的特性当然要版本凑个整才有仪式感。

在这里,我们就直接引用上一篇文章中的相关说明,只作稍微修改。

在 2022 年 4 月份的 TC39 双月会议上,装饰器提案成功进入到 Stage 3,这也是装饰器提案历经数个版本以后离 Stage 4 最近的一次。TypeScript 中同样大量使用了装饰器相关的语法,但实际上 TS 中的装饰器(experimental)、Babel 中的装饰器(legacy)都是基于第一版的装饰器提案进行实现的,而目前终于到达 Stage 3 的装饰器提案已经是第三版了。

如果你有兴趣了解更多装饰器的历史,可以阅读笔者的 走近MidwayJS:初识TS装饰器与IoC机制 中的介绍,或者贺师俊(Hax)老师在 是否应该在production里使用typescript的decorator? 的回答。

随着新版装饰器提案的更新,TypeScript 势必也需要对应地进行支持,但由于其工作量较大,8 月份的 4.8 正式版本与预计在 11 月发布的 4.9 正式版本中都不包含新版装饰器的实现,我们预计要在 2023 年过年时才能在 5.0 beta 版本中一睹它的真容。但无论如何,其最终实现必然是遵循装饰器提案 proposal-decorators 的,因此你可以阅读笔者此前发表的 ECMAScript 双月报告:装饰器提案进入 Stage 3 ,了解新版装饰器的功能、旧版装饰器的废弃原因,以及新版装饰器如何不通过反射元数据的方式实现依赖注入。

虽然我们迎来了新版装饰器,但也无需担心旧版装饰器从此就被扫进历史的尘埃里了,对旧版装饰器的支持肯定是会被保留相当长一段时间的,语言支持、框架改进、用户接受,每一步都快不起来。我们可能要到 TypeScript 20.0 beta 版本中才会看到官方宣布将废弃对实验性装饰器的支持,希望那时笔者仍然在更新此专栏。当然,如果 Angular、Nest、InversifyJs 这些框架和工具库能快速跟进,那么这一进程可能会大大加快。

对于使用者来说,基本不用担心额外的学习成本,新版装饰器在大部分情况下能完全覆盖掉旧版装饰器的能力。但对于框架基础库开发者来说,两个版本装饰器之间

发布于 2022-09-26 15:33

文章被以下专栏收录