xDocxDoc
AI
前端
后端
iOS
Android
Flutter
AI
前端
后端
iOS
Android
Flutter
  • Typescript5.9

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'.

解决方案:

  1. 更新 @types/node:
    npm update @types/node --save-dev
  2. 显式指定缓冲区类型(如用 Uint8Array<ArrayBuffer> 替代 Uint8Array)
  3. 访问 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


总结

🚀 核心升级亮点

🔧 关键特性详解

  1. 开发效率提升
    • tsc --init 生成更合理的默认配置
    • 编辑器悬浮提示支持类型展开/折叠(预览)
    • DOM 接口直接显示功能摘要
  2. 语法增强
    • import defer 实现模块按需初始化
    • --module node20 提供稳定的 Node.js 模式
  3. 性能优化
    • 减少复杂类型的实例化深度
    • 加速文件存在性检查
  4. 生态适配
    • 调整 ArrayBuffer 类型定义(需检查 Buffer 用法)
    • 修复类型参数推断边界问题

⚠️ 升级注意:

  • 检查 ArrayBuffer 相关代码是否受影响
  • 复杂泛型项目需验证类型推断变更

立即安装体验:npm install -D typescript@5.9
探索 TypeScript 7.0 预览版:https://marketplace.visualstudio.com/items?itemName=TypeScript.vscode-typescript-next

最后更新: 2025/8/26 10:07