可选的 catch 子句变量
感谢 @tinganho 的贡献,TypeScript 2.5 实现了一项新的 ECMAScript 特性,允许用户省略 catch 子句中的变量。例如,在使用 JSON.parse 时,你可能需要用 try/catch 包装函数调用,但你最终可能并不需要使用抛出的 SyntaxError。
tslet input = "...";try {JSON.parse(input);} catch {// ^ Notice that our `catch` clause doesn't declare a variable.console.log("Invalid JSON given\n\n" + input);}
在 checkJs/@ts-check 模式下的类型断言/转换语法
TypeScript 2.5 引入了在项目中通过普通 JavaScript 断言表达式类型的能力。其语法是一个 /** @type {...} */ 注释,后跟一个需要重新评估类型的带括号的表达式。例如
tsvar x = /** @type {SomeType} */ AnyParenthesizedExpression;
重复包的去重与重定向
当在 TypeScript 2.5 中使用 Node 模块解析策略进行导入时,编译器现在会检查文件是否源自“相同的”包。如果文件源自一个 package.json 包含与之前遇到的包相同的 name 和 version 字段的包,TypeScript 会将自身重定向到最顶层的那个包。这有助于解决某些问题,例如两个包可能包含相同的类声明,但由于包含 private 成员而导致它们在结构上不兼容的情况。
作为一个额外的福利,通过避免从重复的包中加载 .d.ts 文件,这还可以减少编译器和语言服务的内存及运行开销。
--preserveSymlinks 编译器标志
TypeScript 2.5 引入了 preserveSymlinks 标志,其行为与 Node.js 中的 --preserve-symlinks 标志相对应。该标志的行为也与 Webpack 的 resolve.symlinks 选项相反(即,将 TypeScript 的 preserveSymlinks 设置为 true,等同于将 Webpack 的 resolve.symlinks 设置为 false,反之亦然)。
在这种模式下,对模块和包的引用(例如 import 和 /// <reference type="..." /> 指令)都是相对于符号链接文件的位置进行解析,而不是相对于符号链接所指向的路径。有关更具体的示例,请参阅 Node.js 官方文档。