自动类型推断省去了很多编写类型的麻烦,但很多情况下还是需要自动声明类型。
但自动声明的类型有局限性,比如这个类型:
key:string部分是索引签名,即可以添加任意key为string、value为任意类型的索引。
虽然这有时不太方便。
如果我们手动推断呢?
这将提示所有索引。
但是b的类型是错误的,仍然需要声明类型来约束它。
难道只是头痛吗?
声明方法缺乏具体形参的变量类型信息,手动推断方法无法保证类型正确。
有没有一种方法可以两全其美?
4.9之前确实没有这个东西。
像这样使用它:
无需为变量声明此类型。 使用手动推断的类型,以便提示基于特定值。
这不是两全其美吗!
它的作用是允许您使用手动推断的类型而不是声明的类型,这增加了灵活性。 同时,还可以对这种推断出的类型进行类型检测,以保证安全。
然而,satisfies 的方法也有它的问题,比如这里使用推断类型:
那么索引就无法动态扩展:
而如果是声明的索引签名,则支持扩展:
因此,何时使用声明类型、何时使用推断类型 + satisfies 取决于具体情况。
这个新的句型还是很有用的,估计以后在代码中会经常看到。
npm install typescript@beta
这个最新的也是一个标签。
通过 npm dist-tag ls 可以听到 npm 包的所有标签:
因此,npm install typescript 无法下载该包的 beta 版本。 它下载与最新标签对应的版本。 仅当自动指定 typescript@beta 时,这才有可能。
言归正传,这个标签是怎么来的呢?
发送包时,会使用 npmpublishtypescript参数表,手动标记为“latest”。
您还可以自动运行 npmpublish --tags beta,以便标记 beta 标签。
除了在分包时指定标签之外,还可以通过 npm dist-tag 命令为包的某个版本打上标签:
TypeScript 中有两种类型的变量,一种是自动声明的,另一种是手动推断的。
大多数情况下,不需要自动声明类型,而是使用手动推断,这样更方便。
但在函数参数、变量类型等需要约束的情况下,就必须自动声明。
有时手动推断类型更合适typescript参数表,但也需要以声明的形式来约束类型。
你不可能两全其美。
因此,ts添加了satisfies的句型,这样就可以使用手动推断的类型,同时还可以添加类型约束。
这个句型还在4.9-beta包中,需要npm install时自动指定dist-tag。
估计到了正式版之后,大家在写ts代码的时候又会遇到新的麻烦:
我应该使用自动声明的类型,还是手动推断的类型+满足? 这是个问题。
1、
2、
3.
4.
5.