TypeScript 4.9 发布!
TypeScript 是一种通过添加类型和类型检查构建在 JavaScript 之上的语言。类型可以描述诸如对象的形状、如何调用函数以及属性是否可以为 null 或 undefined 之类的东西。TypeScript 可以检查这些类型,以确保我们不会在程序中出错,这样我们就可以自信地编码。它还可以为编辑器中的自动完成、转到定义和重构等其他工具提供支持。事实上,如果您使用过 Visual Studio 或 VS Code for JavaScript 等编辑器,您其实已经体验过由 TypeScript 提供的支持了!
satisfies 运算符
TypeScript 开发人员经常面临两难境地:我们既要确保某些表达式匹配某些类型,又要保留该表达式的最具体类型以用于推理目的。
新的 satisfies 运算符让我们验证表达式的类型是否匹配某种类型,而不更改该表达式的结果类型。例如,我们可以使用 satisfies 来验证 palette 的所有属性是否与 string | number[] 兼容:
type Colors = "red" | "green" | "blue";type RGB = [red: number, green: number, blue: number];const palette = {red: [255, 0, 0],green: "#00ff00",bleu: [0, 0, 255]
// ~~~~ The typo is now caught!
} satisfies Record<Colors, string | RGB>;// Both of these methods are still accessible!
const redComponent = palette.red.at(0);
const greenNormalized = palette.green.toUpperCase();
使用 in 运算符缩小未列出属性的范围
作为开发人员,我们经常需要处理在运行时不完全已知的值。事实上,我们通常不知道属性是否存在,无论我们是从服务器获得响应还是读取配置文件。JavaScript 的 in 运算符可以检查对象上是否存在属性。
以前,TypeScript 允许我们缩小任何未明确列出属性的类型的范围。
interface RGB {
red: number;
green: number;
blue: number;
}interface HSV {
hue: number;
saturation: number;
value: number;
}function setColor(color: RGB | HSV) {
if ("hue" incolor) {
// 'color' now has the type HSV}
// ...
}
在这里,RGB 类型没有列出色调并缩小范围,留给我们的是 HSV 类型。
TypeScript 4.9 使 in 运算符在缩小未列出属性的类型时更加强大。该语言不会按原样保留它们,而是将它们的类型与 Record<"property-key-being-checked", unknown> 相交。
interface Context {packageJSON: unknown;
}function tryGetPackageName(context: Context): string | undefined {
const packageJSON = context.packageJSON;
// Check to see if we have an object.
if (packageJSON && typeof packageJSON === "object") {
// Check to see if it has a string name property.
if ("name" in packageJSON && typeof packageJSON.name === "string") {
// Just works!
return packageJSON.name;}}
return undefined;
}
TypeScript 4.9 还加强了一些关于如何使用 in 的检查,确保左侧可分配给类型 string | number | symbol,右侧可分配给对象。这有助于检查我们是否使用了有效的属性键,而不是不小心检查基元。
自动访问器
TypeScript 4.9 支持 ECMAScript 中即将推出的功能,称为自动访问器。自动访问器的声明就像类的属性一样,除了它们是用 accessor 关键字声明。
class Person {accessor name: string;constructor(name: string) {this.name = name;}
}
检查 NaN 是否相等
JavaScript 开发人员的一个主要难题是使用内置的相等运算符检查值 NaN。对于某些背景,NaN 是一个特殊的数值,代表“不是数字”。没有什么能等于 NaN——即使是 NaN!但至少对称,一切总是不等于 NaN。
严格来说,这不是特定于 JavaScript 的问题,因为任何包含 IEEE-754 浮点数的语言都具有相同的行为。但是 JavaScript 的主要数字类型是浮点数,而 JavaScript 中的数字解析通常会导致 NaN。反过来,检查 NaN 最终变得相当普遍,正确的方法是使用 Number.isNaN——但正如我们提到的,很多人不小心最终使用 someValue === NaN 进行检查。
TypeScript 现在与 NaN 直接比较时会出错,并且会建议使用 Number.isNaN 的一些变体。
function validate(someValue: number) {
return someValue !== NaN;
// ~~~~~~~~~~~~~~~~~
// error: This condition will always return 'true'.
// Did you mean '!Number.isNaN(someValue)'?
}
我们认为,此更改应该严格有助于捕获初学者错误,类似于 TypeScript 当前在与对象和数组文字进行比较时发出错误的方式。
File-Watching 使用文件系统事件
在 TypeScript 4.9 中,文件监视默认由文件系统事件提供支持,只有在我们未能设置基于事件的监视程序时才会回退到轮询。对于大多数开发人员来说,当以 --watch 模式运行或使用 TypeScript 支持的编辑器(如 Visual Studio 或 VS Code)运行时,这应该会提供更少的资源密集型体验。
文件监视的工作方式仍然可以通过环境变量和 watchOptions 进行配置。一些编辑器如 VS Code 可以独立支持 watchOptions。使用源代码驻留在网络文件系统(如 NFS 和 SMB)上的更奇特设置的开发人员可能需要选择回到旧行为。不过,如果服务器具有合理的处理能力,则启用 SSH 并远程运行 TypeScript 可能会更好,这样它就可以直接访问本地文件。VS Code 有很多远程扩展来简化这件事。
编辑器的“Remove Unused Imports”和“Sort Imports”命令
在 TypeScript 4.3 中,我们引入了一个名为“Sort Imports”的命令,它只会对文件中的导入进行排序,但不会删除它们——并且会像这样重写文件。
import { bar, foo } from "./helper";
import { HoneyBadger, Moose, Zebra } from"./zoo";let x: Moose | HoneyBadger = foo();
“Sort Imports”的警告是,在 Visual Studio Code 中,此功能仅可用作保存时命令,而不是可手动触发的命令。
TypeScript 4.9 增加了另一半,现在提供了“Remove Unused Imports”。TypeScript 现在将删除未使用的导入名称和语句,但会单独保留相对顺序。
import { Moose, HoneyBadger } from"./zoo";
import { foo } from "./helper";let x: Moose | HoneyBadger = foo();
所有希望使用任一命令的编辑器都可以使用此功能;但值得注意的是,Visual Studio Code(1.73 及更高版本)将内置支持,并将通过其命令面板显示这些命令。
更多 TypeScript 4.9 发布信息请前往原博客查看~
TypeScript 4.9 发布!相关推荐
- TypeScript 2.1发布
TypeScript是微软开发的一个JavaScript的超集,提供了最新的JavaScript特性以及可选的静态类型.近日,TypeScript 2.1发布.该版本提供了功能更为强大的类型检查器,并 ...
- TypeScript 3.7 发布,带来 Optional Chaining 等特性
TypeScript 3.7 发布了,此版本带来了许多新特性. Optional Chaining 首先一大亮点是 Optional Chaining,这是社区呼唤特别强烈的一个 ECMAScript ...
- TypeScript 3.5 发布,速度提升、工具智能
TypeScript 3.5 发布了,此版本在编译器.语言和编辑器工具上带来了一些新特性. 速度提升 TypeScript 3.5 引入了几种对于 type 检查和增量构建的优化,使得速度大幅提升. ...
- TypeScript 3.4 发布
TypeScript 3.4 发布了,此版本主要更新内容如下: Faster subsequent builds with the --incremental flag:使用 --incrementa ...
- 华为称不会退出海外市场;英伟达证实遭遇黑客攻击;TypeScript 4.6发布 | 极客头条...
「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 苏宓 出品 | CSDN(ID:CSDNnews) ...
- 国内首个 App SDK 国家标准成功立项;苹果意外泄露iPhone 12发布时间;TypeScript 4.0 发布| 极客头条
「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 国内要闻 国内首个 App SDK 国家标准成功立项,华为. ...
- 苹果意外泄露iPhone 12发布时间;阿里将停止印度部分服务;TypeScript 4.0 发布| 极客头条...
整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...
- 互联网公司分批返岗;Safari 将封杀超过398天的 HTTPS 证书;TypeScript 3.8 发布 | 极客头条...
整理 | 屠敏 快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注 ...
- 华为宣布方舟编译器将开源;苹果秋季发布会定档9月10日;TypeScript 3.6 发布 | 极客头条...
快来收听极客头条音频版吧,智能播报由标贝科技提供技术支持. 「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有 ...
- 搜狐大量员工遭遇“工资补助”诈骗;腾讯客服回应“借钱就能避免微信号被封”;TypeScript 4.7发布|极客头条
「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...
最新文章
- 传输层协议(TCP/UDP)介绍
- C#是面向对象编程语言
- linux c之gcc编译出现error:lvalue required as unary ‘‘ operand解决办法
- rocketmq 订阅组_必须先理解的RocketMQ入门手册,才能再次深入解读
- 【算术、关系、逻辑、位、复合赋值、带副作用的、自增、自减、其它】运算符(学习笔记4--C语言运算符)
- 科学实证与理论研究方法
- 经济数据预测 | Python实现ELM极限学习机股票价格时间序列预测
- 通过DXGI实现高效抓屏
- 文件共享服务器 域组访问设置权限,怎么对局域网所共享的文件进行访问权限管理...
- python深度学习基于pytorch——arange、linspace 函数生成数组
- R语言笔记--par()函数详解
- 周记——20150907
- linux和尚取水设计,小和尚取水
- 【统计学】【2018.05】【含源码】时间序列:以密度预测评价方法为中心的预测与评价方法
- win10 家庭中文版内存占用过高
- 让屏幕日落而息的护眼神器——f.lux,自动调节屏幕色温,减少眼部疲劳
- 双系统-打不开Ubuntu
- 如何在不使用手机的前提下恢复/解密/还原加密后的.enc格式华为手机助手备份文件?
- AndroidStudio报错:Could not install Gradle distribution from ‘https://services.gradle.org/distribution
- vue中 敏感字眼的过滤