10. JSDoc中的@overload支持
TypeScript 5.0添加了对@overload JSDoc标签的支持,允许您为JavaScript代码中的单个实现定义多个函数签名。当处理需要支持多种参数类型或形状的复杂函数时,此功能特别有用。以下是一个示例:
/** * @overload * @param {string} a * @param {string} b * @return {string} */ /** * @overload * @param {number} a * @param {number} b * @return {number} */ /** * @param {string | number} a * @param {string | number} b */ export function add(a, b) { if (typeof a === 'number' && typeof b === 'number') { return a + b; } else if (typeof a === 'string' && typeof b === 'string') { return a.concat(b); } } const numResult = add(1, 2); // 3 const strResult = add('hello', 'world'); // "helloworld" const errResult = add('hello', 123); // Error: No overload matches this call.
在此示例中,add函数用两个@overload JSDoc标记标记,指定它可以处理数字和字符串作为参数。
11. 在--build下传递特定于emit的标志
TypeScript 5.0引入了在使用--build标志时传递特定于emit的标志的能力。此功能允许您在构建项目时微调输出,从而对构建过程进行更精细的控制。一些新闻:
--declaration:从项目中的TypeScript和JavaScript文件生成.d.ts文件。
--emitDeclarationOnly:仅输出d.ts文件而不是JavaScript文件。
--declarationMap:为d.ts文件创建源映射。
--sourceMap:为发出的JavaScript文件创建源映射文件。
--inlineSourceMap:将源映射文件包含在发出的JavaScript中。
12. 编辑器中的大小写不敏感导入排序
TypeScript 5.0通过使导入排序不区分大小写来改进编辑器中的导入排序。这种改变导致组织导入时出现更自然和直观的排序顺序,从而产生更清晰和可读的代码。
13. 完整的switch/case自动完成
TypeScript 5.0通过提供完整的switch/case自动完成增强了代码完成体验。在使用联合类型时,编辑器现在可以建议所有可能的情况,减少错过情况的机会,使编写全面的switch语句更容易。以下是一个示例:
type Animal = "cat" | "dog" | "fish"; function speak(animal: Animal): string { switch (animal) { // TypeScript 5.0 will suggest all possible cases: "cat", "dog", "fish" } }
14. 速度、内存和包大小优化
TypeScript 5.0带来了各种性能优化,包括更快的类型检查、减少的内存使用和更小的包大小。这些改进使使用TypeScript更加愉快,确保平稳高效的开发体验。
15. 破坏性变化和弃用
与任何主要版本发布一样,TypeScript 5.0引入了一些破坏性变化和弃用。在升级之前,仔细查看发行说明并彻底测试您的项目是至关重要的。一些值得注意的破坏性变化包括:
运行时要求:TypeScript现在针对ECMAScript 2018。TypeScript包还设置了最低期望引擎为12.20。对于Node用户,这意味着TypeScript 5.0的最低版本要求至少是Node.js 12.20及更高版本。
lib.d.ts更改:对如何生成DOM类型的更改可能会对现有代码产生影响。值得注意的是,某些属性已从number转换为数字文字类型,并且有关剪切、复制和粘贴事件处理的属性和方法已移动到不同的接口。
API Breaking Changes:已移至模块,删除了一些不必要的接口并进行了一些正确性改进。
禁止在关系运算符中进行隐式强制类型转换:
function func1(ns: number | string) { return ns * 4; // Error, possible implicit coercion } function func2(ns: number | string) { return ns > 4; // Error, possible implicit coercion } function func3(ns: number | string) { return +ns > 4; // OK }
枚举重大改进:在TypeScript 5.0中,您将不会看到那些枚举奇怪的问题,以下是两个重要的错误改进:
// Part1: Assigning an out-of-domain literal to an enum type // now errors out as one would expect. enum SomeEvenDigit { Zero = 0, Two = 2, Four = 4, } // Now correctly an error let m: SomeEvenDigit = 1; // Part2: Enums declaring values with mixed numeric and // indirect string enum references incorrectly create an all-numeric enum. enum Letters { A = 'a', } enum Numbers { one = 1, two = Letters.A, } // Now correctly an error const t: number = Numbers.two;
在—experimentalDecorators下更准确的参数装饰器类型检查(在构造函数中)
一些已弃用的配置和配置值
结论
总之,TypeScript 5.0带来了许多功能和改进,那么哪个功能最有用呢?