对于联合类型,never
是中性元素,即 never | T = T
。
另一种看待它的方法是,对于类型 T=[T_1, ..., T_n]
的元组,联合类型 T_1 | ... | T_n
由 T[number]
给出。对于空元组 []
,[][number]
产生 never
是空类型集的联合类型。
哪种类型是相交类型的中性元素? IE。对于任意类型 T
,哪个内置类型 N
产生 N & T = T
,因此是空集的交集类型?
编辑
我的问题背后的理由是构建一个递归辅助类型来与元组类型中的所有类型相交。请参阅下面我的回答...
最佳答案
我自己想出来了:
对于联合类型,type NeutralUnion<T> = never | T
与 T
相同.
对于交叉类型,type NeutralIntersection<T> = unknown & T
与 T
相同.
所以,类似于构建 type UnionOfTupleElements<T> = T[number]
,我们可以构建:
type IntersectionOfTupleElements<T extends unknown[]> =
T extends [infer U, ...infer V]
? U & IntersectionOfTupleElements<V>
: unknown;
它产生:
IntersectionOfTupleElements<[]> = unknown
IntersectionOfTupleElements<[T]> = T
IntersectionOfTupleElements<[T1, T2]> = T1 & T2
关于typescript - 交叉口类型的中性元素是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70697269/