发布 TypeScript 5.6

发布 TypeScript 5.6

💡 原文英文,约4900词,阅读约需18分钟。
📝

内容提要

TypeScript 5.6引入了新功能和改进,包括恢复了语言服务搜索tsconfig.json文件的更改,添加了--build模式的新标志,以及对真值和nullish表达式的更严格检查。还包括迭代器辅助方法、对任意模块标识符的支持、跳过类型检查的新编译器选项,以及区域优先的诊断、提交字符和自动导入的排除模式的改进。值得注意的行为变化包括在node_modules中尊重文件扩展名和package.json,并对计算属性进行正确的覆盖检查。

🔎

延伸解读

更严格的真值与空值检查:提前捕获常见错误

TypeScript 5.6 新增了对真值和 nullish 表达式的严格检查,能识别出语法上总是为真或总是非空的表达式。例如,忘记调用正则的 test 方法、误用箭头函数代替比较运算符、?? 与比较运算符的优先级混淆等,现在都会报错。这有助于在编译阶段发现潜在 bug,但注意 true、false、0、1 等惯用写法仍被允许,不会影响正常代码。

迭代器辅助方法与 IteratorObject 类型

5.6 引入了迭代器辅助方法,如 map、filter、take 等,可直接在生成器或内置集合的迭代器上使用,无需先转换为数组。同时新增 IteratorObject 类型,解决 TypeScript 原有 Iterator 类型与 JavaScript 内置 Iterator 的命名冲突。这些方法需要较新的运行时或 polyfill 支持。此外,--strictBuiltinIteratorReturn 标志可让内置迭代器的返回值类型更安全,避免未检查 done 就使用 value 的常见错误。

--build 模式与 --noCheck 的构建策略调整

TypeScript 5.6 改变了 --build 模式的行为:即使依赖项目存在中间错误,也会继续构建下游项目,并尽力生成输出文件。若希望遇到错误即停止,可使用新增的 --stopOnBuildErrors 标志,适合 CI 环境。另外,--noCheck 选项允许跳过所有输入文件的类型检查,从而加速仅需生成 JavaScript 或声明文件的场景,但注意它并非完全不做类型检查,生成 .d.ts 时仍可能进行必要的惰性检查。

编辑器体验优化:区域诊断与自动导入排除

5.6 为编辑器带来多项改进。区域优先的诊断功能允许语言服务仅检查当前可见区域,大幅提升大文件中的编辑响应速度。自动导入排除模式支持通过正则表达式过滤特定模块说明符的导入建议,例如排除 lodash 的深层导入或 node: 前缀。此外,提交字符的细化让编辑器能更智能地根据输入的字符自动补全。这些功能目前主要在 VS Code 中可用。

❓

Q&A

TypeScript 5.6有哪些新功能?

TypeScript 5.6引入了对tsconfig.json文件搜索的恢复、新的--stopOnBuildErrors标志、更严格的真值和nullish表达式检查、迭代器辅助方法、支持任意模块标识符等功能。

如何使用TypeScript 5.6的--noCheck选项?

使用--noCheck选项可以跳过所有输入文件的类型检查,适用于快速生成声明文件或在不同阶段分离JavaScript文件生成与类型检查。

TypeScript 5.6中对真值和nullish表达式的检查有什么变化?

TypeScript 5.6对真值和nullish表达式进行了更严格的检查,能够捕捉到潜在的错误,例如不正确的条件表达式将会导致编译错误。

TypeScript 5.6如何改进迭代器的使用?

TypeScript 5.6引入了迭代器辅助方法,如map和take,允许在生成器中使用这些方法,增强了对迭代器的支持。

TypeScript 5.6的--stopOnBuildErrors标志有什么作用?

--stopOnBuildErrors标志允许在构建过程中遇到错误时停止构建,提供了类似于早期版本的行为。

TypeScript 5.6如何处理计算属性的覆盖检查?

TypeScript 5.6修复了计算属性的覆盖检查,确保正确检查基类成员的存在性,避免了之前的错误。

🏷️

标签

➡️

继续阅读