17611538698
webmaster@21cto.com

TypeScript 4.9 正式发布

资讯 0 881 2022-12-23 11:15:08

TypeScript 概述

TypeScript 是一种建立在 JavaScript 之上的脚本语言,用于强类型安全编程。TypeScript 在前端江湖业界可谓非常有名。

微软在上周刚刚发布了 TypeScript 4.9。我们来看一看它有什么新特性,新机制。

TypeScript 4.9 新特性

satisfies 操作符

satisfies 运算符的目的是在不改变量类型的情况下对变量强制执行条件。

例如,我们想让颜色是字符串或 RGB 颜色,代码看起来像这样:


  1. type RGB = [red: number, green: number, blue: number];
  2. type Color = RGB | string;
  3. const myColor: Color = 'blue';


我们并不知道myColor是字符串还是 RGB 数组成员。所以还不能做这样的事情,myColor.toLowerCase()函数也处理不了,即便它是一个字符串。

现在好了,使用 TS 4.9,satisfies 操作符使这种操作成为可能:


  1. type RGB = [red: number, green: number, blue: number];
  2. type Color = RGB | string;
  3. const myColor = 'blue' satisfies Color; // works
  4. const myIncorrectColor = 420 satisfies Color; // error
  5. myColor.toUpperCase(); // valid because myColor is a string


类中的自动访问器

TS 4.9 支持 ECMAScript 中即将推出的功能,称为自动访问器的机制。自动访问器的声明就像类的属性一样,只是它们是用accessor关键字声明的即可。


  1. class Person {
  2. accessor name: string;
  3. constructor(name: string) {
  4. this.name = name;
  5. }
  6. }


类似于以下类的声明方式:


  1. class Person {
  2. #__name: string;
  3. get name() {
  4. return this.#__name;
  5. }
  6. set name(value: string) {
  7. this.#__name = name;
  8. }
  9. constructor(name: string) {
  10. this.name = name;
  11. }
  12. }


检查是否相等 NaN

NaN是一个特殊的数值,代表“不是数字”。不过,没有什么是永远等于NaN。

TypeScript 现在在与NaN 直接比较时会出错,并且会建议使用Number.isNaNinstead 的一些变体。

“删除未使用的导入”和“排序导入”命令

过去,TypeScript 在 TS 4.3 上只支持两个命令来管理导入:“Organize Imports”和“Sort Imports”。

TypeScript 4.9 添加了更多内容,现在它提供了“Remove Unused Imports”。TypeScript 现在会删除未使用的导入名称与语句,但会单独保留相对顺序。

未声明的属性与in操作符

作为开发人员,我们经常需要处理在运行时不完全已知的值。在现实情况里,我们常常不知道属性是否存在,无论我们是从服务器获得响应还是读取配置文件。

JavaScript 的in运算符可以检查对象上是否存在某属性。

TypeScript 4.9 的in 运算符在缩小根本不存在属性或类型时更加强大。该语言会将它们的类型与.Record<"property-key-being-checked", unknown> 比较。

TypeScript 4.9 还加强了一些关于如何in操作符使用的检查,以确保左侧可分配给 type string | number | symbol,右侧可分配给object. 这有助于检查开发者是否使用了有效的属性键值,而不在出现例外的检查。

结论

本文对 TypeScript 4.9 新特性的总结,让我们一起走在前端技术栈的最新潮流!


作者:东方春晓

说明:如果你觉得这篇文章有帮助,可以在这里请作者喝杯咖啡~

评论