期限分配性的指的是联合类型在进行类型级操作时应如何处理(例如keyof
或映射类型)。
-
非分布式(默认)操作应用于联合体每个成员上存在的属性。
-
分配性操作应用于所有成员工会分开。
让我们举个例子。
type Fruit =
| { species: 'banana', curvature: number }
| { species: 'apple', color: string }
让我们假设,出于某种原因,您想知道可以存在于一个上的所有可能的键Fruit
.
非分配性
您的直觉可能会告诉您这样做:
type KeyOfFruit = keyof Fruit; // "species"
但是,这只会为您提供联合体每个成员都存在的属性。在我们的例子中,species
是所有人共有的唯一共同财产Fruit
.
和申请是一样的keyof
到两种类型的联合。
keyof ({ species: 'banana', curvature: number } | { species: 'apple', color: string })
分配性
使用分发时,不会执行该操作just共同的属性。相反,它是在工会的每个成员分别。然后将结果相加。
type DistributedKeyOf<T> =
T extends any
? keyof T
: never
type KeyOfFruit = DistributedKeyOf<Fruit>; // "species" | "curvature" | "color"
在本例中,应用了 TypeScriptkeyof
给工会的每个成员,并总结结果。
keyof { species: 'banana', curvature: number } | keyof { species: 'apple', color: string }