类型在联合上分布是什么意思?

问题描述 投票:0回答:1

我正在阅读文章:"Unionize and Objectify: A Trick for Applying Conditional Types to Objects"

在TypeScript中,我们最强大的工具是条件类型。这是因为它们具有两个独特的功能:

  • 他们通过工会进行分配。
  • 它们使您能够使用infer关键字。

在这种情况下,“通过工会进行分配”通常是什么意思?

typescript types theory union-types conditional-types
1个回答
0
投票

术语distributive表示在进行类型级别的操作(例如映射的类型)时应如何处理联合类型。

  • 非分配(默认)操作应用于联合的所有成员的公共属性
  • Distributive操作应用于联合的所有成员

让我们举个例子。

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 })

Distributive

使用分布,仅对公共属性执行not操作。相反,它是在工会的每个成员分别上完成的。然后将结果加在一起。

type DistributedKeyOf<T> =
  T extends any
    ? keyof T
    : never

type KeyOfFruit = DistributedKeyOf<Fruit>; // "species" | "curvature" | "color"

在这种情况下,TypeScript将keyof应用于联合的每个成员,并对结果求和。

keyof { species: 'banana', curvature: number } | keyof { species: 'apple', color: string }
© www.soinside.com 2019 - 2024. All rights reserved.