TypeScript 5.4 Beta 发布总结
TypeScript 的高级项目经理 Daniel Rosenwasser 近日宣布了 TypeScript 5.4 的 Beta 版本发布。该版本带来了类型推断的改进、新的 NoInfer 工具类型以及一些破坏性变更。
改进的类型推断
TypeScript 5.4 Beta 在闭包中对某些类型的类型推断进行了改进。例如,在以下代码中:
function getUrls(url: string | URL, names: string[]) {
if (typeof url === "string") {
url = new URL(url);
}
return names.map(name => {
url.searchParams.set("name", name)
return url.toString();
});
}在 map 的箭头函数的闭包中,url 变量的类型必然是 URL。之前的 TypeScript 版本会根据 getUrls 函数的签名将 url 推断为 string | URL。而此次发布的 Beta 版本正确地理解到箭头函数总是在 url 最后一次被赋值为 URL 对象之后创建,因此将 url 推断为 URL 类型。
开发者对这一改进表示欢迎,认为这将减少不必要的 if 语句和 ! 操作符的使用。
新增 Object.groupBy 和 Map.groupBy 声明
TypeScript 5.4 还添加了对 JavaScript 新静态方法 Object.groupBy 和 Map.groupBy 的声明。需要注意的是,这些方法仅在配置 target 为 esnext 或调整 lib 设置时可用,预计未来将在 es2024 目标下稳定可用。
新的 NoInfer 工具类型
TypeScript 5.4 引入了新的 NoInfer 工具类型,允许开发者阻止 TypeScript 的类型推断。这在处理泛型类型参数时特别有用。例如:
function createStreetLight<C extends string>(colors: C[], defaultColor?: NoInfer<C>) {
// ...
}
createStreetLight(["red", "yellow", "green"], "blue");在此代码示例中,TypeScript 5.4 将 C 类型解析为 "red" | "yellow" | "green",而之前的版本则会将 C 推断为 "red" | "yellow" | "green" | "blue"。
破坏性变更
TypeScript 5.4 还包含由于改进的准确性而导致的破坏性变更。开发者可以在 Microsoft 的开发者博客上查看完整的发布说明,包括技术细节、示例和所有新功能的列表。
安装 Beta 版本
开发者可以通过以下命令安装发布的 Beta 版本:
npm install -D typescript@beta此次 TypeScript 5.4 Beta 版本的发布带来了多项重要改进和新功能,特别是类型推断的增强和新的 NoInfer 工具类型,预计将为开发者提供更强大的工具和更高效的开发体验。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。