当前位置: 首页 > news >正文

Typescript 5.8 发布

以下是 TypeScript 5.8 官方发布说明的中文整理,重点列出新特性和修复的 Bug:


新特性

1. 返回表达式中的分支细粒度检查
  • return 语句中的条件表达式(如三元运算符 ? :)会直接检查每个分支是否符合函数的返回类型。
  • 示例
    declare const untypedCache: Map<any, any>;
    function getUrlObject(urlString: string): URL {
        return untypedCache.has(urlString) ?
            untypedCache.get(urlString) :  // 分支1: any
            urlString;                     // 分支2: string → 报错(无法赋值给 `URL`)
    }
    
2. --module nodenext 支持 require() 导入 ECMAScript 模块
  • Node.js 22 允许从 CommonJS 模块 require() 导入 ESM 模块(不含顶层 await 的 ESM 文件)。
  • TypeScript 5.8 在 --module nodenext 下不再报错此类导入。
3. 新增 --module node18 编译选项
  • 为 Node.js 18 提供稳定的模块解析规则:
    • 禁止 require() 导入 ESM 模块。
    • 允许已弃用的 import 断言语法(assert)。
4. --erasableSyntaxOnly 选项
  • 启用后,禁止包含运行时语义的 TypeScript 语法(如 enum、带运行时代码的命名空间等),确保代码可被擦除为纯 JavaScript。
  • 示例
    class C {
        constructor(public x: number) {}  // 报错:参数属性(`public x`)不可用
    }
    
5. --libReplacement 标志
  • 控制是否允许通过 @typescript/lib-* 替换默认的 lib 类型定义(默认行为可能未来禁用,建议显式配置)。
6. 声明文件中保留计算属性名称
  • 生成 .d.ts 文件时,保留计算属性名称的原始变量名(如 [propName] 而非 [x: string])。
  • 示例
    export let propName = "theAnswer";
    export class MyClass {
        [propName]: number; // 声明文件保留 `[propName]` 而非 `[x: string]`
    }
    
7. 程序加载与更新的性能优化
  • 减少路径规范化时的数组分配。
  • 避免在无结构变化的编辑中重新验证项目配置(提升 --watch 和编辑器响应速度)。

重要 Bug 修复

1. import 断言语法限制
  • --module nodenext 下,弃用 assert 语法,强制使用 with 关键字(Node.js 22 已不再支持 assert)。
  • 示例
    import data from "./data.json" assert { type: "json" };  // 报错:需改用 `with`
    
2. lib.d.ts 更新引发的类型检查影响
  • 更新了 DOM 类型定义,可能影响现有代码的类型检查(需检查相关类型兼容性)。
3. 路径大小写敏感性问题修复
  • 修复 Windows 系统上因路径大小写不一致导致的模块解析失败问题。
4. 声明文件生成兼容性问题
  • TypeScript 5.8 生成的声明文件可能不兼容旧版本(如 5.7 及更早版本)。

其他改进

1. 错误消息优化
  • 对模板字符串类型不匹配等错误提供更清晰的提示。
2. 编辑器体验提升
  • VS Code 的自动导入和代码补全更精准。
3. 实验性语法支持
  • 解析 import attributes 提案语法(需运行时支持):
    import data from "./data.json" with { type: "json" };
    

未来计划

  • TypeScript 5.9 将包含进一步改进(如条件返回类型的增强检查)。
  • 可通过 npm install typescript@next 提前体验夜间构建版本。

完整内容详见 TypeScript 5.8 官方说明。

相关文章:

  • [Qt5] QJson数据之间的转换以及QByteArray图像数据压缩
  • ACM-BufferedWriter---格式化输出浮点数
  • ADC采集模块与MCU内置ADC性能对比
  • GitHub开源协议选择指南:如何为你的项目找到最佳“许可证”?
  • 记一次按键中断的bug
  • C++中函数的调用
  • 【论文笔记】Attentive Eraser
  • 利用Java爬虫获取1688店铺所有商品信息:实战指南
  • 探秘基带算法:从原理到5G时代的通信变革【七】FFT/DFT
  • C++11之右值引用
  • Pycharm操作(二)设置字体大小
  • 基于深度学习的网络摄像头图像实时分类实践:从理论到完整实现
  • 集群、分布式与微服务架构 区别
  • 常用 nvm 命令指南
  • 懒加载能够解决Spring循环依赖吗
  • golang lumberjack 日志包
  • 【Linux】之【Bug】VMware 虚拟机开机 一直卡在黑屏左上角下划线闪烁界面
  • PostgreSQL中的模式(Schema)
  • 基于值函数的强化学习算法之SARSA详解
  • 02 HarmonyOS Next仪表盘案例详解(一):基础篇
  • 使用推荐算法的网站开发 java/网站关键字优化软件
  • 简单的公司网站系统/制作网页完整步骤
  • 网站推广公司大家好/成都seo网络优化公司
  • 高端网站建设公司有哪些项目/国内免费域名注册
  • 建站需要注意哪些/网站推广软件免费版下载
  • 做网站找外包公司要要搞清楚什么/seo在线培训机构