我无法理解TypeScript中术语union typesintersection types背后的逻辑.

实际上,如果不同类型的属性是属性集,如果我将它们与&运算符组合,得到的类型将是这些属性集中的union.按照这个逻辑,我希望这样的类型被称为union types.如果我把它们和|结合起来,我只能使用它们的共同属性,即集合中的intersection.

Wikipedia似乎支持这种逻辑:

任意给定非空集S的幂集(所有子集的集合)通过两个运算形成一个布尔代数,一个集合代数∨ := ∪ (unions )和∧ := ∩ (十字路口).

然而,根据typescriptlang.org,情况恰恰相反:&用于生产intersection types|用于生产union types.

我肯定有另一种看待它的方式,但我无法理解.

推荐答案

这是另一种思考的方式.考虑四组:蓝色的东西,红色的东西,大的东西,和小的东西.

如果你把所有蓝色的东西和所有小的东西放在一起,你会得到union个属性——集合中的所有东西都有蓝色属性和小属性.

但如果取blue small thingsred small things中的union,则结果集中只有smallness属性是通用的.Intersecting"蓝色小"和"红色小"产生"小".

换句话说,取值域的并集产生一组相交的属性,反之亦然.

In image form: enter image description here

Typescript相关问答推荐

根据另一个成员推断类成员的类型

当类型断言函数返回假时,TypScript正在推断从不类型

即使子网是公共的,AWS CDK EventBridge ECS任务也无法分配公共IP地址

如何根据另一个属性的布尔值来缩小函数属性的返回类型?

对深度对象键/路径进行适当的智能感知和类型判断,作为函数参数,而不会触发递归类型限制器

打印脚本丢失函数的泛型上下文

适当限制泛型函数中的记录

正确使用相交类型的打字集

Typescript 类型守卫一个类泛型?

如何过滤文字中的类对象联合类型?

类型';字符串|数字';不可分配给类型';未定义';.类型';字符串';不可分配给类型';未定义';

复选框Angular 在Ngfor中的其他块中重复

ANGLE订阅要么不更新价值,要么不识别价值变化

将接口映射到交叉口类型

抽象类对派生类强制不同的构造函数签名

创建一个函数,该函数返回一个行为方式与传入函数相同的函数

在ts中获取级联子K类型?

我可以使用对象属性的名称作为对象中的字符串值吗?

当受其他参数限制时,通用参数类型不会缩小

创建通过删除参数来转换函数的对象文字的类型