TypeScript 4.6 发布
TypeScript 4.6 现已正式发布。
新特性概览
- 支持在
super()前执行构造函数代码 - 面向 Destructured Discriminated Unions(可辨识联合类型)提供控制流分析
- 优化递归深度检查 (Recursion Depth Checks)
- 优化索引访问类型 (Indexed Access Inference) 的推导
- 面向 Dependent Parameters(依赖参数类型)提供控制流分析
--target es2022- 删除了
react-jsx中不必要的参数 - JSDoc Name Suggestions
- 对 JavaScript 文件引入更多语法检查
- 引入新的性能分析工具:TypeScript Trace Analyzer
- 破坏性变更
自 Beta 版和 RC 版以来有什么新变化?
beta 版时错过了 面向 Destructured Discriminated Unions(可辨识联合类型)提供控制流分析 和 --target es2022两个特性的添加。自 beta 版以来,另外一个值得注意的变化是,删除了react-jsx模式中的void 0参数。
自 RC 以来进行的一项更改是对不匹配的 JSDoc 参数名称的建议。同时还进行了一些内部重构,修复了某些问题,纠正了一些奇怪的错误消息,并在某些情况下将类型检查性能提高了 3%。可以在此处阅读有关该更改的更多信息。
此特性允许在 super 调用前去执行没有引用 this 的代码,这是由于 JavaScript 的限制,super 前不能调用 this,TypeScript 之前出于实现的原因,规定不能执行所有代码。
示例
class Base {
// ...
}
class Derived extends Base {
someProperty = true;
constructor() {
// error!
// have to call 'super()' first because it needs to initialize 'someProperty'.
doSomeStuff();
super();
}
}
TypeScript 提供了--generateTraceflag 来生成编译器在本次编译工作中的耗时占比,或者用于诊断 TypeScript 编译器的问题。虽然--generateTrace生成了有价值的信息,但在现有的跟踪可视化工具中阅读效果不好。
最近发布的 TypeScript Trace Analyzer 可更直观、更清晰地展示报告。详情点此查看。
--target es2022
TypeScript 的--target 选项已支持es2022。
这意味着像类字段 (class fields) 这样的特性现在会有一个可以保留的稳定输出 target,亦意味着可使用新的内置功能如 :at() method on Arrays, Object.hasOwn 和 the cause option on new Error。
延伸阅读:ECMAScript 2022 预览
这是 4.6 版本的主要特性,在 TypeScript 中引入的 JavaScript 文件,现在会提示其语法错误,如重复声明、对 export 声明使用了修饰符、在 switch case 语句出现多次的 default case 等。类似于 TypeScript 文件,可通过@ts-nocheck来禁用对此文件的类型检查。
示例
const foo = 1234;
// ~~~
// error: Cannot redeclare block-scoped variable 'foo'.
// ...
const foo = 5678;
// ~~~
// error: Cannot redeclare block-scoped variable 'foo'.
function container() {
export function foo() {
// ~~~~~~
// error: Modifiers cannot appear here.
}
}