TypeScript数组交叉类型的含义及与合并对象数组的区别
TypeScript中
Point[] & Loc[]类型解析 一、Point[] & Loc[]的含义
Point[] & Loc[]是两个数组类型的交叉类型,简单来说,这个变量的值必须同时满足Point[]和Loc[]的所有要求:
- 你可以把它当作纯
Point数组来用,遍历每个元素时都能正常访问x、y属性; - 也可以把它当作纯
Loc数组来用,遍历每个元素时都能正常访问lat、long属性; - 这就要求数组里的每一个元素,都必须同时具备
Point和Loc的所有属性——也就是每个元素都是Point & Loc类型。
二、和(Point & Loc)[]的区别
在TypeScript的类型系统中,Point[] & Loc[]和(Point & Loc)[]是完全等价的,它们对数组的约束逻辑完全一致:数组中的每一个元素都必须是Point与Loc的交叉类型。
验证示例
// 对(Point & Loc)[]类型的变量操作 const coord3: (Point & Loc)[] = [{x: 5, y: 10, lat: 100, long: 50}]; coord3.push({x: 1, y: 2, lat: 3, long: 4}); // ✅ 合法:元素具备所有属性 coord3.push({x: 1, y: 2}); // ❌ 报错:缺少lat和long属性 // 对Point[] & Loc[]类型的变量操作 const coord4: Point[] & Loc[] = [{x: 5, y: 10, lat: 100, long: 50}]; coord4.push({x: 1, y: 2, lat: 3, long: 4}); // ✅ 合法:元素具备所有属性 coord4.push({lat: 3, long: 4}); // ❌ 报错:缺少x和y属性
从示例能看到,两种类型对元素的要求完全相同,操作时的类型校验逻辑也一致。
内容的提问来源于stack exchange,提问作者Gourav Pokharkar
相关产品推荐
相关产品推荐

