Typescript 类型脚本分配条件类型

Typescript 类型脚本分配条件类型,typescript,Typescript,因此,我正在阅读关于typescript的文档,但无法理解这个概念 因此,文件规定: 在分布式条件类型的实例化中,T扩展了U?X:Y,条件类型中对T的引用解析为联合类型的各个组成部分(即,T指条件类型分布在联合类型上后的各个组成部分)。此外,对X内T的引用具有额外的类型参数约束U(即T被认为可分配给X内的U) 我无法理解部分T指的是条件类型分布在联合类型上后的单个成分 谁能给我解释一下吗。 如果能举一个同样的例子,我将不胜感激,文档中的例子对我来说不是很清楚。在分布式条件类型(比如type-Bo

因此,我正在阅读关于typescript的文档,但无法理解这个概念

因此,文件规定:

在分布式条件类型的实例化中,T扩展了U?X:Y,条件类型中对T的引用解析为联合类型的各个组成部分(即,T指条件类型分布在联合类型上后的各个组成部分)。此外,对X内T的引用具有额外的类型参数约束U(即T被认为可分配给X内的U)

我无法理解部分
T指的是条件类型分布在联合类型上后的单个成分

谁能给我解释一下吗。
如果能举一个同样的例子,我将不胜感激,文档中的例子对我来说不是很清楚。

在分布式条件类型(比如
type-BoxIfObject=T extends-object?Array:T;
)中,当该类型应用于联合(比如
number |{a:string}
)时,这就好像条件类型应用于联合的每个组成部分,因此在条件类型中,
T
将依次引用联合的每个组成部分(因此
T
将首先是
number
,然后
T
将是
{a:string}

因此,当我们应用
BoxIfObject
时,
T
将永远不会引用整个联合
number{a:string}
,而是依次引用它的每个组成部分。基本上
BoxIfObject=BoxIfObject | BoxIfObject=number | ArrayHmm,我只是通读了一遍,对我来说很有意义。。。我不知道我是否能解释得更好,但让我们来看看。在下文中,
…x…
,表示“可能出现
x
的某个表达式”

选中类型为裸类型参数的条件类型称为分布条件类型

在这种情况下,类型参数表示类型表达式,而裸类型参数是一种类型表达式,其中类型参数单独出现,并且不是某个更复杂的类型表达式的一部分。选中的类型是出现在扩展之前的类型。让我们看一些例子:

  • 类型A=字符串扩展T?“是”:“否”
    这不是分布式条件类型。选中的类型是
    字符串
    ,它不是泛型类型参数
  • type B={x:T}扩展了{x:number}?“是”:“否”
    这不是分布式条件类型。选中的类型是
    {x:T}
    ,其中包含类型参数
    T
    ,但不是裸类型参数
  • 类型C=T扩展字符串?“是”:“否”
    这是一种分布式条件类型;选中的类型是
    T
    ,它是一个裸泛型类型参数
在实例化期间,分布式条件类型会自动分布在联合类型上。例如,
T的实例化扩展了U?带有
T
的类型参数
A | B | C
的X:Y
解析为
(A扩展U?X:Y)|(B扩展U?X:Y)|(C扩展U?X:Y)

这就是财产的本质。如果将类型别名
F
定义为分布式条件类型,如:

type F<T> = T extends ...T... ? ...T... : ...T...
这是什么

type E = D<"a" | "b" | 0 | true> 
类型E=D
好吧,下面是如何不这样做:


type E=(“a”|“b”| 0 | true)扩展字符串?(“a”|“b”| 0 |真):“不”//这似乎很好,但当我浏览文档时,短语
T中的
之后的
一词指的是条件类型分布在联合类型上后的单个成分
是斜体的吗?@AmolGupta我不能谈论斜体的选择。。。。但这似乎与我所写的一致,当(即在)实例化发生时,
T
将依次成为联盟的每个组成部分。一个非常透彻的解释,阅读您的文章总是一种乐趣:)
type E = D<"a" | "b" | 0 | true>