当前位置: 首页 > 网络应用技术

打字稿4.8 Beta出版:道路上的装饰器,变窄和增强以及模板字符串类型中的推断

时间:2023-03-06 11:05:30 网络应用技术

  Typescript已在2022.06.21上发布了4.8 Beta版本,您可以查看4.8迭代计划中包含的所有问题和PR。如果您想首先体验新功能,请执行:

  让我们安装Typescript的Beta版本,或在VS代码中安装JavaScript和TypeScript,以更新构建的-Typescript支持。

  本文是作者的第四个打字稿更新日志。上一篇文章是“发行的Typescript 4.7 Beta:Nodejs的ES模块支持,新型编程语法,类型控制流程分析等。查找,作者将继续更新与Typescript相关的DevBlog,谢谢您的阅读。

  此外,由于Beta版本通常与官方版本没有显着差异,因此该系列只会引入Beta版本而不是官方版本。

  关于4.8的官方版本和新版本的装饰设备的详细分析,我将在Typescript综合高级指南中进行更新。

  在4月的TC39双月会议上,该装饰性提案成功进入了第3阶段,这也是距阶段4的最接近的时间,此前几个版本的装饰性提案。Typecript也使用了大量的语法相关语法,但是实际上,Babel中的装饰性(实验性)和装饰设备是根据装饰性提案的第一个版本实现的。目前,装饰性建议已迭代到第三版。

  如果您有兴趣了解更多装饰的历史,则可以阅读作者的Midwayjs方法:TS Decorator和IOC机制的引入,或者He Shijun老师应该在生产中使用TypeScript使用打字稿十年?

  随着新版本的装饰性提案的更新,Typescript还需要相应地支持,但是由于其较大的工作负载,4.8 Beta版本不包括相关的新版本的装饰(因此它已打开)这条路),但它是特定的功能,必须与装饰性提案提案者中的引言相同。

  尽管我们已经迎来了新版本的装饰设备,但我们不需要担心装饰设备的旧版本就被扫入历史的尘土中。对旧版本的装饰设备的支持肯定会长时间保留。用户接受它并且无法站起来。Typescript 20.0 Beta版本。我希望当时作者仍然会更新此专栏。

  对于用户而言,无需担心额外的学习成本。在大多数情况下,新版本的装饰设备可以完全涵盖旧版本的装饰设备的能力。但是,对于框架基础库的开发人员来说,两种版本的装饰设备之间的差异确实很大很大,例如装饰师和元数据相关的运行顺序。

  如果您对新版本的装饰设备的详细使用感兴趣,则可以阅读我先前发布的Ecmascript Bi -month报告:装饰性建议进入第3阶段,了解新版本的装饰功能,放弃了旧版本的装饰设备的原因,以及新版本的装饰设备如何无法通过反射元数据注射。

  Typescript 4.8版本进一步增强,主要反映在组合类型和交叉类型中,并缩小了类型。

  例如,作为打字稿系统中的顶级类型,未知类型包含所有其他类型。实际上,未知的效果是相同的:独特的无定义,未定义的类型,以及万物的起源。

  为什么它是万物的来源?根据结构化类型的打字稿类型,两种类型之间的兼容性是通过它们内部属性类型的类型进行比较的:

  在此示例中,feedCat函数可以接受狗类型的参数。原因是在结构化系统的比较中,狗的类型和猫型被认为是一致的。

  此外,如果狗目前添加了一种新方法:

  目前,此示例仍然建立,因为目前,狗类型与猫类型相比具有更多属性。在结构化类型系统的判断下,可以认为狗类型是猫型的子类型,就像这样:

  回到主题,因为它是一个空的对象,因此可以将除空和未定义以外的所有基本类型视为以后派生。

  在版本4.8中,它现在彼此兼容:

  同时,对于版本4.8,所使用的交叉类型,例如直接简化为类型,它不是来自通用类型的前提,而不是non -null / undefined。这是因为交叉类型需要两种类型同时,只要它不是零 /未定义的类型,就可以认为它必须与该类型保持一致,因此可以直接从交叉类型中删除:

  基于此转换,您现在可以使用原始类型中的null和未定义,即,原始构建的工具类型不可卸载的实现将更改为以下内容:

  实施原则是将其直接判断为永不判断,而从未在合并类型的结果中消失。

  从实施不可删除的情况下,我们可以知道,如果一个值不为null或未定义,则其值实际上等于IT和十字架的值,这意味着我们可以编写以下代码:

  过去,此示例将丢弃错误:Type T不能分配给类型,现在我们知道,如果删除了null和未定义,则T实际上等同于。

  最后,由于这些变化,打字稿类型控制流的类型控制流量分析得到了进一步增强。现在,将完全考虑未知类型的变量,因此如果其他情况下,它将在TRSE分支中缩小:

  在版本4.7中,TypeScript支持推论扩展语法,因此我们可以直接转到推论的预期类型值,而不是再次有条件的语句判决:

  基于此,4.8版已进一步增强。当推断被限制为原始类型时,现在将推导推断到类型级别的类型信息:

  同时,打字稿将检查提取的值是否可以反映回初始字符串。例如,它将检查它是否等于Somenum。在下面的示例中,这是因为它不能重新映射,只能派生到数字类型:

  打字稿中的通用填充也将受到调用方的影响,如下所示:

  目前,RES1的类型和功能将得出,但是如果我们改变方式:

  目前,A,B和C派生到字符串,数字和布尔值类型,这意味着此时该函数的通用类型被填充为这种元组类型。

  这种通用填充方法称为绑定模式,在版本4.8中,禁止基于绑定模式的类型推导,因为其对通用类型的影响并不总是正确:

  在此示例中,绑定模式强行填充了通用参数,这是非常不合理的 - 您如何确定我是数组结构?

  我们知道它未在JavaScript中建立,因为该对象使用参考地址存储它,实际上是在比较两个不同的参考地址。为了更好地避免代码中的错误以比较对象和数组类型,现在将使Typescript成为错误提示:

  同样,如果您在if语句中使用了该函数,那么Typescript也会给您提示:

  版本4.8还在TSC上进行了一些性能优化工作,包括听力模式,增量构造和项目参考下的模型。在当前的侦听模式下,它将跳过由于用户操作而没有更改的文件。

  您可以阅读#48784了解更多优化。

  全文后,请参阅4.9 Beta版本:-)。

  原始:https://juejin.cn/post/711301498530392270