当前位置: 首页 > Web前端 > JavaScript

TypeScript4.9发布!

时间:2023-03-26 20:36:44 JavaScript

TypeScript是一种通过添加类型和类型检查构建在JavaScript之上的语言。类型可以描述对象的形状、函数的调用方式以及属性是否可以为空或未定义等内容。TypeScript可以检查这些类型,以确保我们不会在程序中出错,这样我们就可以放心地编写代码。它还可以为其他工具提供支持,例如编辑器中的自动完成、转到定义和重构。事实上,如果您使用过VisualStudio或VSCodeforJavaScript等编辑器,您已经体验过TypeScript提供的支持!满足运算符TypeScript开发人员经常面临两难境地:我们希望确保某些表达式匹配某些类型,同时保留该表达式的最具体类型以用于推理目的。新的满足运算符让我们验证表达式的类型是否与特定类型匹配,而无需更改该表达式的结果类型。例如,我们可以使用satisfies来验证调色板的所有属性是否与string|兼容。数字[]:类型颜色=“红色”|“绿色”|“蓝色的”;输入RGB=[红色:数字,绿色:数字,蓝色:数字];constpalette={red:[255,0,0],green:"#00ff00",bleu:[0,0,255]//~~~~拼写错误现在被发现了!}满足Record;//这两种方式还是可以访问的!constredComponent=palette.red.at(0);constgreenNormalized=palette.green.toUpperCase();使用in运算符缩小未列出属性的范围作为开发人员,我们经常需要处理在运行时不完全已知的值。事实上,我们通常不知道该属性是否存在,我们是否从服务器获得响应或读取配置文件。JavaScript的in运算符检查对象上是否存在属性。以前,TypeScript允许我们缩小任何未明确列出属性的类型的范围。接口RGB{红色:数字;绿色:数字;蓝色:数字;}接口HSV{色调:数字;饱和度:数字;值:数字;}函数setColor(颜色:RGB|HSV){if(“色调”incolor){//'color'现在有HSV类型}//...}这里,RGB类型没有列出色调并缩小范围,留给我们的是HSV类型。TypeScript4.9使in运算符在缩小未列出属性的类型时更加强大。该语言不会按原样保留它们,而是将它们的类型与Record<"property-key-being-checked",unknown>相交。interfaceContext{packageJSON:unknown;}functiontryGetPackageName(context:Context):字符串|undefined{constpackageJSON=context.packageJSON;//检查是否有对象。if(packageJSON&&typeofpackageJSON==="object"){//检查是否有字符串名称property.if("name"inpackageJSON&&typeofpackageJSON.name==="string"){//刚刚好!返回packageJSON.name;}}返回未定义;}TypeScript4.9还加强了对in用法的一些检查,确保左侧可分配给类型string|编号|符号和右侧可分配给对象。这有助于检查我们是否使用了有效的属性键,而不是意外地检查基元。自动访问器TypeScript4.9支持ECMAScript中即将推出的功能,称为自动访问器。自动访问器就像类属性一样声明,除了它们是用accessor关键字声明的。类Person{访问者名称:字符串;构造函数(名称:字符串){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的一些变体。functionvalidate(someValue:number){returnsomeValue!==NaN;//~~~~~~~~~~~~~~~~~//错误:此条件将始终返回“true”。//Did你是说'!Number.isNaN(someValue)'?}我们相信这一变化应该严格帮助捕获初学者错误,类似于TypeScript当前在与对象和数组文字进行比较时发出错误的方式。使用文件系统事件监视文件在TypeScript4.9中,文件监视默认由文件系统事件提供支持,只有在我们未能设置基于事件的监视程序时才会回退到轮询。对于大多数开发人员来说,当以--watch模式或使用支持TypeScript的编辑器(如VisualStudio或VSCode)运行时,这应该会提供资源密集度较低的体验。文件监视的工作方式仍然可以通过环境变量和watchOptions进行配置。一些编辑器如VSCode可以独立支持watchOptions。使用源代码驻留在网络文件系统(如NFS和SMB)上的更多奇特设置的开发人员可能需要选择回退到旧行为。但是,如果服务器具有合理的处理能力,则最好启用SSH并远程运行TypeScript,以便它可以直接访问本地文件。VSCode有很多远程处理扩展,使这更容易。编辑器的“删除未使用的导入”和“排序导入”命令在TypeScript4.3中,我们引入了一个名为“排序导入”的命令,它只会对文件中的导入进行排序,但不会删除它们-并将像这样重写文件。import{bar,foo}from"./helper";import{HoneyBadger,Moose,Zebra}from"./zoo";letx:Moose|蜜獾=foo();“排序导入”警告是,在VisualStudioInCode中,此功能仅可用作保存时间命令,而不是可手动触发的命令。TypeScript4.9添加了另一半,现在提供“删除未使用的导入”。TypeScript现在将删除未使用的导入名称和语句,但仅保留相对顺序。从“./zoo”导入{Moose,HoneyBadger};从“./helper”导入{foo};让x:Moose|HoneyBadger=foo();所有希望使用任一命令的编辑器都可以使用此命令;但值得注意的是,VisualStudioCode(1.73版及更高版本)将具有内置支持,并将通过其命令面板公开这些命令。更多关于TypeScript4.9发布的信息,请访问原博客~