三清阁符咒网

TypeScript 4.9 发布!

符咒网    2023-03-15    61

关注肇庆道教灵符网请符我们

(本文阅读时间:9分钟)

本文节选翻译自 Daniel Rosenwasser 的博客

Type 是一种通过添加类型和类型检查构建在 Java 之上的语言肇庆道教灵符网请符。类型可以描述诸如对象的形状、如何调用函数以及属性是否可以为null 或undefined 之类的东西。Type 可以检查这些类型,以确保我们不会在程序中出错,这样我们就可以自信地编码。它还可以为编辑器中的自动完成、转到定义和重构等其他工具提供支持。事实上,如果您使用过Visual Studio 或VS Code for Java 等编辑器,您其实已经体验过由Type 提供的支持了!

satisfies 运算符

Type 开发人员经常面临两难境地:我们既要确保某些表达式匹配某些类型,又要保留该表达式的最具体类型以用于推理目的肇庆道教灵符网请符

新的 satisfies 运算符让我们验证表达式的类型是否匹配某种类型,而不更改该表达式的结果类型肇庆道教灵符网请符。例如,我们可以使用 satisfies 来验证 palette 的所有属性是否与 string | number[] 兼容:

typeColors = "red"| "green"| "blue";

typeRGB = [red: number, green: number, blue: number];

constpalette = { red: [ 255, 0, 0], green: "#00ff00", bleu: [ 0, 0, 255] // ~~~~ The typo is now caught!} satisfies RecordColors, string| RGB;

// Both of these methods are still accessible!constredComponent = palette.red.at( 0); constgreenNormalized = palette.green.toUpperCase;

使用 in 运算符缩小未列出属性的范围

作为开发人员,我们经常需要处理在运行时不完全已知的值肇庆道教灵符网请符。事实上,我们通常不知道属性是否存在,无论我们是从服务器获得响应还是读取配置文件。Java 的 in 运算符可以检查对象上是否存在属性。

以前,Type 允许我们缩小任何未明确列出属性的类型的范围肇庆道教灵符网请符

interfaceRGB { red: number; green: number; blue: number; }

interfaceHSV { hue: number; saturation: number; value: number; }

functionsetColor( color: RGB | HSV) { if( "hue"incolor) { // 'color' now has the type HSV}// ...}

在这里,RGB 类型没有列出色调并缩小范围,留给我们的是 HSV 类型肇庆道教灵符网请符

Type 4.9 使 in 运算符在缩小未列出属性的类型时更加强大肇庆道教灵符网请符。该语言不会按原样保留它们,而是将它们的类型与 Record"property-key-being-checked", unknown 相交。

interfaceContext { packageJSON: unknown;}

functiontryGetPackageName( context: Context): string| undefined{ constpackageJSON = context.packageJSON; // Check to see if we have an object.if(packageJSON typeofpackageJSON === "object") { // Check to see if it has a string name property.if( "name"inpackageJSON typeofpackageJSON.name === "string") { // Just works!returnpackageJSON.name; }}returnundefined; }

Type 4.9 还加强了一些关于如何使用 in 的检查,确保左侧可分配给类型 string | number | symbol,右侧可分配给对象肇庆道教灵符网请符。这有助于检查我们是否使用了有效的属性键,而不是不小心检查基元。

自动访问器

Type 4.9 支持 ECMA 中即将推出的功能,称为自动访问器肇庆道教灵符网请符。自动访问器的声明就像类的属性一样,除了它们是用 accessor 关键字声明。

classPerson { accessor name: string; constructor( name: string) { this.name = name; }}

检查 NaN 是否相等

Java 开发人员的一个主要难题是使用内置的相等运算符检查值 NaN肇庆道教灵符网请符。对于某些背景,NaN 是一个特殊的数值,代表“不是数字”。没有什么能等于 NaN——即使是 NaN!但至少对称,一切总是不等于 NaN。

严格来说,这不是特定于 Java 的问题,因为任何包含 IEEE-754 浮点数的语言都具有相同的行为肇庆道教灵符网请符。但是 Java 的主要数字类型是浮点数,而 Java 中的数字解析通常会导致 NaN。反过来,检查 NaN 最终变得相当普遍,正确的方法是使用 Number.isNaN——但正如我们提到的,很多人不小心最终使用 someValue === NaN 进行检查。

Type 现在与 NaN 直接比较时会出错,并且会建议使用 Number.isNaN 的一些变体肇庆道教灵符网请符

functionvalidate( someValue: number) { returnsomeValue !== NaN; // ~~~~~~~~~~~~~~~~~// error: This condition will always return 'true'.// Did you mean '!Number.isNaN(someValue)'?}

我们认为,此更改应该严格有助于捕获初学者错误,类似于 Type 当前在与对象和数组文字进行比较时发出错误的方式肇庆道教灵符网请符

File-Watching 使用文件系统事件

在 Type 4.9 中,文件监视默认由文件系统事件提供支持,只有在我们未能设置基于事件的监视程序时才会回退到轮询肇庆道教灵符网请符。对于大多数开发人员来说,当以 --watch 模式运行或使用 Type 支持的编辑器(如 Visual Studio 或 VS Code)运行时,这应该会提供更少的资源密集型体验。

文件监视的工作方式仍然可以通过环境变量和 watchOptions 进行配置肇庆道教灵符网请符。一些编辑器如 VS Code 可以独立支持 watchOptions。使用源代码驻留在网络文件系统(如 NFS 和 SMB)上的更奇特设置的开发人员可能需要选择回到旧行为。不过,如果服务器具有合理的处理能力,则启用 SSH 并远程运行 Type 可能会更好,这样它就可以直接访问本地文件。VS Code 有很多远程扩展来简化这件事。

编辑器的“Remove Unused Imports”和“Sort Imports”命令

在 Type 4.3 中,我们引入了一个名为“Sort Imports”的命令,它只会对文件中的导入进行排序,但不会删除它们——并且会像这样重写文件肇庆道教灵符网请符

import{ bar, foo } from"./helper"; import{ HoneyBadger, Moose, Zebra } from"./zoo";

letx: Moose | HoneyBadger = foo;

“Sort Imports”的警告是,在 Visual Studio Code 中,此功能仅可用作保存时命令,而不是可手动触发的命令肇庆道教灵符网请符

Type 4.9 增加了另一半,现在提供了“Remove Unused Imports”肇庆道教灵符网请符。Type 现在将删除未使用的导入名称和语句,但会单独保留相对顺序。

import{ Moose, HoneyBadger } from"./zoo"; import{ foo } from"./helper";

letx: Moose | HoneyBadger = foo;

所有希望使用任一命令的编辑器都可以使用此功能;但值得注意的是,Visual Studio Code(1.73 及更高版本)将内置支持,并将通过其命令面板显示这些命令肇庆道教灵符网请符

更多 Type 4.9 发布信息请前往原博客查看肇庆道教灵符网请符

本文链接:https://fuzhouwang.org/index.php/post/11292.html

转载声明:本站文章中有转载或采集其他网站内容, 如有转载的文章涉及到您的权益及版权,还麻烦及时联系我们,我们将及时删除,谢谢配合。

上一篇   下一篇

相关文章