You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 14:05:21