本篇宝哥将介绍TypeScript4.7版本中引入的一个与infer相关的新特性,可以让infer类型推断更加简洁。在介绍infer相关的新特性之前,我们先看一个例子:typeFirstIfString=Textends[inferS,...unknown[]]?S扩展字符串?S:从不:从不;在上面的代码中,FirstIfString工具类型使用了TypeScript的条件类型、条件链和infer类型推断。在第一个条件类型中,我们判断类型参数T的实际类型是否为非空元组类型,同时使用infer声明类型变量S,用于存储在执行过程中捕获到的元组类型模式匹配过程。元素的类型。在第二个条件类型中,我们继续判断类型变量S是否是字符串类型的子类型。如果满足条件,则返回类型变量S对应的类型,否则条件类型的所有假分支都返回never类型。介绍完FirstIfString工具类型的功能,我们来验证一下它的功能://stringtypeA=FirstIfString<[string,number,number]>;//"hello"typeB=FirstIfString<["hello",number,number]>;//"你好"|“世界”类型C=FirstIfString<[“你好”|"world",boolean]>;//nevertypeD=FirstIfString<[boolean,number,string]>;从上面的结果可以看出,FirstIfString工具类型是可以正常使用的。那么现在的问题是,这个工具类型内部使用了两种条件类型,我们是否可以使用一种条件类型来实现同样的功能呢?答案是肯定的!TypeScript4.7版允许我们添加一个可选的extends子句来推断类型,以指定对类型变量的显式约束。