TypeScript 5.9 发布公告
今天,我们激动地宣布 TypeScript 5.9 正式发布!TypeScript 是基于 JavaScript 构建的语言,通过添加类型语法实现静态类型检查。其类型检查器不仅能在编码阶段避免错误,还为编辑器提供了强大的工具支持(如自动补全、跳转定义等)。了解更多请访问 https://www.typescriptlang.org/。安装命令:
npm install -D typescript
Beta 和 RC 后的更新
自候选版(RC)发布后,TypeScript 5.9 无新增变更。
精简化的 tsc --init
运行 tsc --init
不再生成冗长的 tsconfig.json
文件。新版本默认配置更符合现代项目需求:
{
"compilerOptions": {
// 文件结构
// "rootDir": "./src",
// "outDir": "./dist",
// 环境设置(详见 https://aka.ms/tsconfig_modules)
"module": "nodenext", // 强制模块检测
"target": "esnext", // 使用最新 ECMAScript 特性
"types": [], // 限制类型声明加载
// 输出控制
"sourceMap": true, // 生成源码映射
"declaration": true, // 生成声明文件
"declarationMap": true, // 声明文件映射源码
// 严格类型检查
"noUncheckedIndexedAccess": true, // 索引访问需明确
"exactOptionalPropertyTypes": true, // 可选属性精确类型
// 代码风格(默认注释)
// "noImplicitReturns": true,
// "noImplicitOverride": true,
// 推荐配置
"strict": true, // 启用所有严格检查
"jsx": "react-jsx", // JSX 处理方案
"verbatimModuleSyntax": true, // 精确模块语法解析
"isolatedModules": true, // 独立模块编译
"skipLibCheck": true // 跳过库声明检查
}
}
主要改进:
- 默认启用关键严格检查选项
- 预设常用配置(如 JSX 支持)
- 精简注释,减少冗余配置
import defer
语法支持
新增 ECMAScript 提案语法 import defer
,实现模块延迟执行:
// ✅ 仅支持命名空间导入
import defer * as feature from "./some-feature.js";
// ❌ 禁止以下写法
import defer { doSomething } from "some-module";
import defer defaultExport from "some-module";
核心机制:
模块加载后不会立即执行,直到首次访问其导出属性时才触发初始化:
// 模块代码(some-feature.ts)
initializationWithSideEffects(); // 副作用函数
export let specialConstant: number;
// 主文件
import defer * as feature from "./some-feature.js";
console.log("未触发副作用");
console.log(feature.specialConstant); // ✅ 此时执行模块初始化
应用场景:
- 按需加载高开销初始化模块
- 提升应用启动性能
注意:该语法需运行环境原生支持(--module
设为preserve
或esnext
)
--module node20
模式
新增稳定选项模拟 Node.js v20 行为:
tsc --module node20
与 nodenext
的区别:
- 隐含
--target es2023
(非浮动的esnext
) - 未来行为不再变更(
nodenext
可能随 Node.js 更新变化)
DOM API 描述增强
DOM 接口现在显示 MDN 的摘要描述(非仅链接),提升开发体验。
示例变更:https://github.com/microsoft/TypeScript/pull/XXX | https://github.com/microsoft/TypeScript/pull/XXX
可展开的悬浮提示(预览)
在 VS Code 中新增 类型展开/折叠 功能:
export function drawButton(options: Options): void { ... }
- 悬停
options
显示(parameter) options: Options
- 点击
+
展开Options
的详细结构 - 点击
-
折叠回简略视图
反馈通道:https://github.com/microsoft/TypeScript/pull/XXX
可配置悬浮提示长度
新增编辑器设置 js/ts.hover.maximumLength
控制提示信息长度,默认值较旧版本显著增大。
相关变更:https://github.com/microsoft/TypeScript/pull/XXX | https://github.com/microsoft/vscode/pull/XXX
性能优化
类型实例化缓存
减少复杂库(如 Zod、tRPC)的类型实例化深度错误,提升性能。
https://github.com/microsoft/TypeScript/pull/XXX
文件存在检查闭包优化
通过减少不必要的函数闭包创建,大型项目文件检查速度提升约 11%。
https://github.com/microsoft/TypeScript/pull/XXX
重大行为变更
lib.d.ts
更新
ArrayBuffer
类型调整:
不再作为 TypedArray
的超类型,可能引发错误:
// 错误示例
error TS2345: Argument of type 'ArrayBufferLike' is not assignable to parameter of type 'BufferSource'.
解决方案:
- 更新
@types/node
:npm update @types/node --save-dev
- 显式指定缓冲区类型(如用
Uint8Array<ArrayBuffer>
替代Uint8Array
) - 访问
TypedArray.buffer
属性传递数据:let data = new Uint8Array([0, 1, 2]); someFunc(data.buffer); // ✅ 传递 ArrayBuffer
类型参数推断调整
修复类型变量泄漏问题,可能导致新类型错误。通用修复方案:为泛型函数调用显式添加类型参数。
https://github.com/microsoft/TypeScript/pull/XXX
后续计划
TypeScript 6.0 定位
作为 TypeScript 7.0 原生版本的过渡,主要目标:
- 引入与 7.0 对齐的弃用设置
- 小幅调整类型检查行为
- 保持与 5.9 的 API 兼容性
提示:TypeScript 7.0 预览版已可在 https://marketplace.visualstudio.com/items?itemName=TypeScript.vscode-typescript-next
总结
🚀 核心升级亮点
🔧 关键特性详解
- 开发效率提升
tsc --init
生成更合理的默认配置- 编辑器悬浮提示支持类型展开/折叠(预览)
- DOM 接口直接显示功能摘要
- 语法增强
import defer
实现模块按需初始化--module node20
提供稳定的 Node.js 模式
- 性能优化
- 减少复杂类型的实例化深度
- 加速文件存在性检查
- 生态适配
- 调整
ArrayBuffer
类型定义(需检查 Buffer 用法) - 修复类型参数推断边界问题
- 调整
⚠️ 升级注意:
- 检查
ArrayBuffer
相关代码是否受影响- 复杂泛型项目需验证类型推断变更
立即安装体验:npm install -D typescript@5.9
探索 TypeScript 7.0 预览版:https://marketplace.visualstudio.com/items?itemName=TypeScript.vscode-typescript-next