// 实现联合类型到交叉类型的转换typeUnionToIntersection<U>=(Uextendsany?(k:U)=>void:never)extends(k:inferI)=>void?I:never;// 将 Shape 联合类型转换为交叉类型typeShapeIntersection=UnionToIntersection<Shape>; 1. 2. 3. 4. 5. 6. 在这个代码片段中,UnionToIntersection使用条件类型和函数重载来实现...
typeToArrayNonDist<Type>=[Type]extends[any]?Type[]:never; 回到正文,如果说我们想通过一个工具类型实现联合类型到交叉类型的转换,那需要了解一下下面几个ts关键概念:协变、逆变、双向协变、不变性。 类型兼容与可替代性 我们先说说类型兼容与可替代性,因为这两个概念与协变、逆变密切相关。 Typescript的类型...
联合类型表示一个值可以是几种类型之一。 我们用竖线(|)分隔每个类型,所以number | string | boolean表示一个值可以是number,string,或boolean。 需要注意的是,访问联合类型的属性时,只能访问此联合类型的所有类型里共有的属性: let a: string | number a.length // 类型“string | number”上不存在属性“lengt...
联合类型的交叉类型 对于联合类型,情况就有点不同了。 type UnionA = 'px' | 'em' | 'rem' | '%'; type UnionB = 'vh' | 'em' | 'rem' | 'pt'; type IntersectionUnion = UnionA & UnionB; 1. 2. 3. 交叉类型IntersectionUnion的类型为: 'em' | 'rem' 1. 为什么会这样?可以这样来理解。