TypeScript 2.5
可选的 catch
语句变量
得益于 @tinganho 做的工作, TypeScript 2.5 实现了一个新的 ECMAScript 特性, 允许用户省略 catch
语句中的变量.
举例来说, 当使用 JSON.parse
时, 你可能需要将对应的函数调用放在 try
/catch
中, 但是最后可能并不会用到输入有误时会抛出的 SyntaxError
(语法错误).
let input = "...";
try {
JSON.parse(input);
}
catch {
// ^ 注意我们的 `catch` 语句并没有声明一个变量
console.log("传入的 JSON 不合法\n\n" + input)
}
checkJs
/@ts-check
模式中的类型断言/转换语法
TypeScript 2.5 引入了在使用纯 JavaScript 的项目中断言表达式类型的能力.
对应的语法是 /** @type {...} */
标注注释后加上被圆括号括起来, 类型需要被重新演算的表达式.
举例:
var 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 网站的文档.