TypeScript 5.9:`import defer`、精简 `tsc --init` 与 node20 模块模式

TypeScript 官方 Handbook 发布说明页持续维护 5.9 特性说明(页面页脚显示最近更新于2026年10月26日)。对应用与库作者,较实用的变化集中在延迟模块求值语法、更克制的初始化配置,以及面向 Node.js 20 的稳定 --module 选项。[1]

import defer:用到再执行

5.9 支持 ECMAScript 延迟模块求值提案中的 import defer,目前只允许命名空间导入,例如:

import defer * as feature from "./some-feature.js";

模块会加载,但其中的语句与副作用要等到首次访问该命名空间的某个导出时才执行。命名导入与默认导入写法不被允许。该语法不会被 TypeScript 降级改写,需在原生支持的运行时,或由打包器转换;--module 仅在 preserve 与 esnext 下可用。[1]

更短的 tsc --init

过去 tsc --init 会生成大量注释选项,许多人立刻删掉大半。5.9 默认生成更短、更偏规范的 tsconfig.json:例如 module: "nodenext"、target: "esnext"、空的 types 数组、strict、jsx: "react-jsx"、verbatimModuleSyntax、isolatedModules、moduleDetection: "force" 等,并打开 noUncheckedIndexedAccess、exactOptionalPropertyTypes 等更严检查。细节与设计讨论见官方说明中的实现 PR。[1]

其他值得扫一眼的点

  • 新增稳定的 --module node20(及对应 moduleResolution),用于对齐 Node.js v20 行为;指定后默认暗示 --target es2023(可另配),与浮动的 nodenext/esnext 不同。[1]

  • 编辑器侧预览「可展开悬停」(expandable hovers),以及更大的默认可配置悬停长度。[1]

  • lib.d.ts 中 ArrayBuffer 与若干 TypedArray/Buffer 关系收紧,可能出现新的赋值错误;常见处理是更新 @types/node,或写明更具体的缓冲类型、使用 .buffer。[1]

  • 复杂库场景下对类型实例化做了缓存等性能优化;部分类型参数推断行为也可能带来新错误,常可通过显式类型实参修复。[1]

升级前建议在 CI 里跑一遍 tsc,对照官方发布说明逐项核对破坏性变更。

来源

[1] TypeScript 官方文档:TypeScript 5.9 Release Notes,页面 Last updated: Oct 26, 2026。

#TypeScript #5.9 #importDefer #tsc #node20 #新闻资讯

排序方式 :

成为第一条评论!

Nobody's responded to this post yet. Add your thoughts and get the conversation going.