类型|TypeScript 4.0发布,新增可变参数元组类型等( 三 )



如果并非将构造函数的所有路径都分配给实例成员 , 则该属性可能被认为是undefined 。
短路分配运算符
JavaScript和许多其他语言一样支持一组称为复合赋值运算符的运算符 。 复合赋值运算符将一个运算符应用于两个参数 , 然后将结果赋给左侧 。 比如:
JavaScript中的许多运算符都有对应的赋值运算符!但是仍然存在三个值得注意的例外操作符:逻辑和(&amp&amp) , 逻辑或(||)和无效合并(??) 。
TS 4.0新引入一个新的ECMAScript功能添加三个新的赋值操作符:&amp&amp= , ||= , 和??= 。
这些运算符非常适合替换用户可能编写如下代码的任何示例:
甚至一些模式支持惰性初始化 , 只有在需要它们时才加载 。
在极少数情况下使用带有副作用的getter或setter时 , 值得注意的是这些运算符仅在必要时执行赋值 。 从这个意义上讲 , 不仅操作符的右侧"短路"了 , 赋值本身也是如此 。
catch语句中绑定unknown
自TypeScript诞生以来 , catch子句变量始终为any 。 TypeScript允许对它们进行任何操作 。
如果试图防止在错误处理代码中发生更多错误 , 则上面的代码会有一些不良行为!因为这些变量any默认情况下具有类型 , 所以它们缺少类型安全性 , 这些类型安全性可能在无效操作上出错 。

TypeScript 4.0允许指定catch子句变量的类型unknown 。 unknown比any它更安全 , 在对值进行运算之前 , 需要执行某种类型检查 。
尽管catch默认情况下变量的类型不会更改 , 但将来可能会考虑使用新的模式标志 , 以便用户可以选择这种行为 。 同时 , 应该可以编写lint规则来强制变量具有或的显式注释 。
定制JSX工厂
使用JSX时 , 片段是JSX元素的一种 , 它允许返回多个子元素 。 大多数鼓励使用JSX和支持片段的其他库都具有类似的API形状 。
TypeScript 4.0中 , 用户可以通过新jsxFragmentFactory选项来自定义片段工厂 。
例如 , 下面代码实现和React兼容的方式转换JSX , 但将每个工厂调用切换为而不是 , 并使用代替 。
如果需要基于每个文件使用不同的JSX , 则可以利用新的/** @jsxFrag */注释 。 例如 ,
build模式下的速度改进--noEmitOnError
以前 , 使用该标志时 , 在先前编译时出现错误而导致的程序之后编译程序将非常慢 。 这是因为来自上一次编译的任何信息都不会基于该标志被缓存在文件中 。 --incremental--noEmitOnError.tsbuildinfo--noEmitOnError
TypeScript 4.0对此进行了更改 , 从而在这些情况下极大地提高了速度 , 并进而改善了模式情况(这意味着和) 。
--incremental与--noEmit

TypeScript 4.0允许在利用编译时使用该标志 。 以前不允许这样做 。 但是 , 启用更快的增量构建的用例足够重要 , 可以为所有用户启用 。
编辑器改进
TypeScript编译器不仅可以为大多数主要编辑器提供TypeScript本身的编辑体验 , 还可以为Visual Studio系列编辑器等提供JavaScript体验 。 根据编辑器 , 在编辑器中使用新的TypeScript/JavaScript功能会有所不同 , 但是
Visual Studio Code支持选择不同版本的TypeScript 。 另外 , 还有JavaScript /TypeScript Nightly Extension可以保持最新发展(通常非常稳定) 。
Visual Studio 2017/2019具有上述SDK安装程序和MSBuild安装程序 。
转换为可选链接
可选链接是一项新功能 , 受到了广泛的欢迎 。 这就是为什么TypeScript 4.0带来了新的重构来转换常见模式以利用可选链接和无效合并的原因!
Converting a &amp&amp a.b.c &amp&amp a.b.c.d.e.f() to a?.b.c?.d.e.f.(), image
请记住 , 尽管由于JavaScript中真实性/虚假性的微妙之处 , 这种重构不能完美地捕获相同的行为 , 但它应该捕获大多数用例的意图 , 尤其是当TypeScript对类型有更精确的了解时 。


推荐阅读