typescript参数表-TypeScript的新句型满足:声明还是推理?这是个问题

2024-04-27 0 2,982 百度已收录

简而言之,ts代码包括手动推断类型和手动声明类型。

自动类型推断省去了很多编写类型的麻烦,但很多情况下还是需要自动声明类型。

但自动声明的类型有局限性,比如这个类型:

key:string部分索引签名,即可以添加任意key为string、value为任意类型的索引。

它可以检测类型错误支持扩展任意索引。

但只会提示声明的索引,动态添加的不会提示:

虽然这有时不太方便

如果我们手动推断呢?

typescript参数表-TypeScript的新句型满足:声明还是推理?这是个问题

这将提示所有索引。

但是b的类型是错误的,仍然需要声明类型来约束它。

难道只是头痛吗?

声明方法缺乏具体形参的变量类型信息,手动推断方法无法保证类型正确

有没有一种方法可以两全其美?

4.9之前确实没有这个东西

不过4.9增加了一个新的句型satisfies。

像这样使用它:

无需为变量声明此类型。 使用手动推断的类型,以便提示基于特定值。

此外,还对声明的方法进行类型检查

typescript参数表-TypeScript的新句型满足:声明还是推理?这是个问题

这不是两全其美吗!

这就是ts降低句型satisfies的原因

它的作用允许您使用手动推断的类型而不是声明的类型,这增加了灵活性同时,还可以对这种推断出的类型进行类型检测,以保证安全

然而,satisfies 的方法也有它的问题,比如这里使用推断类型:

那么索引就无法动态扩展:

而如果是声明的索引签名,则支持扩展:

因此,何时使用声明类型、何时使用推断类型 + satisfies 取决于具体情况。

typescript参数表-TypeScript的新句型满足:声明还是推理?这是个问题

这个新的句型还是很有用的,估计以后在代码中会经常看到。

但我还没有看到太多,因为它仍处于测试版本

您需要下载 ts 并指定 beta:

npm install typescript@beta

这里的@beta表示指定的标签

我猜你已经下载了所有xxx@latest形式的npm包。

这个最新的也是一个标签。

通过 npm dist-tag ls 可以听到 npm 包的所有标签:

因此,npm install typescript 无法下载该包的 beta 版本。 它下载与最新标签对应的版本。 仅当自动指定 typescript@beta 时,这才有可能。

言归正传,这个标签是怎么来的呢?

typescript参数表-TypeScript的新句型满足:声明还是推理?这是个问题

发送包时,会使用 npmpublishtypescript参数,手动标记为“latest”。

您还可以自动运行 npmpublish --tags beta,以便标记 beta 标签。

除了在分包时指定标签之外,还可以通过 npm dist-tag 命令为包的某个版本打上标签:

估计不久之后即将推出的包包中也会加入这个功能

总结

TypeScript 中有两种类型的变量,一种是自动声明的,另一种是手动推断的。

大多数情况下,不需要自动声明类型,而是使用手动推断,这样更方便。

但在函数参数、变量类型等需要约束的情况下,就必须自动声明。

有时手动推断类型更合适typescript参数表,但也需要以声明的形式来约束类型。

你不可能两全其美。

typescript参数表-TypeScript的新句型满足:声明还是推理?这是个问题

因此,ts添加了satisfies的句型,这样就可以使用手动推断的类型,同时还可以添加类型约束。

它可以看作是手动推理类型和自动声明类型优点融合

这个句型还在4.9-beta包中,需要npm install时自动指定dist-tag。

估计到了正式版之后,大家在写ts代码的时候又会遇到新的麻烦:

应该使用自动声明的类型,还是手动推断的类型+满足? 这是个问题。

1、

2、

3.

4.

5.

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 typescript typescript参数表-TypeScript的新句型满足:声明还是推理?这是个问题 https://www.wkzy.net/game/201461.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务