类型通过联合分配意味着什么?

2024-06-22

我正在读一篇文章:

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

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

在一般情况下以及在这种情况下,“在工会上分配”意味着什么?


期限分配性的指的是联合类型在进行类型级操作时应如何处理(例如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 }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类型通过联合分配意味着什么? 的相关文章

随机推荐

  • C语言中可以使用for循环来改变变量名吗?

    这是一个通用问题 因此我没有尝试解决的实际代码 但我想知道的是 我可以使用for循环更改C中变量的名称 例如 如果我有part1 part2 part3 part 作为我的变量名 有没有办法将它附加到我的循环计数器 以便它会随着每次通过而增
  • 如何让 CSS 字体与这个 Grails PDF 渲染插件一起使用?

    我正在使用 Grails 渲染插件来生成 PDF 我想在我的 PDF 中包含 CSS 以便更好地呈现它 我在上找到了一个例子渲染插件网站 http gpc github io grails rendering docs manual gui
  • 签名时发生错误:未知错误“-2147012894”

    我有 pfx 证书 购买自https www globalsign co uk https www globalsign co uk 我已使用它签署了我的 VSTO Visual Studio 中的 Excel 加载项项目类型 项目的 Cl
  • 在 onLoadFinished() 期间合并游标会在旋转后导致 StaleDataException

    我正在使用 loaderManager 从数据库加载一些结果 不幸的是 下面的代码会产生一个陈旧数据异常旋转设备后 Override public void onLoadFinished Loader
  • 从 Windows Phone 7 中的 Webbrowser 控件检索选定的文本

    当使用 Tap 选择它时 我尝试从 Windows Phone 7 中的 Webbrowser 控件检索选定的文本 还想在选择文本时删除复制图标 按住点击时 我想确认网络浏览器控件有任何选定的文本 我怎样才能在那里存支票 我还想突出显示网络
  • 使用 Fabric js 将背景图像调整为画布大小

    我正在尝试拉伸背景图像 使其适合画布大小 但它不起作用 我已经关注了这个问题 并根据评论我已经实现了拉伸代码 使用 Fabric js 将背景图像拉伸到画布大小 https stackoverflow com questions 29005
  • 使用 android 平台更新 parse.com 中每行的值

    我在更新名为 parse com 的云存储站点中的每行值时遇到问题 我只是使用 parse com 的新手 我已阅读有关它的文档并理解它 但我想做的与那里的例子有点不同 这是我的代码 public void onClick View arg
  • 数据驱动的状态机应用

    我们目前正在开发 数据驱动 状态机应用程序 现在 状态流都在数据库中配置 但在我们当前的设计中 没有任何决策 业务逻辑可以在数据库中配置 因此 代码也必须基本上 了解 状态流 因此在数据库中配置流确实没有意义 我心中有一个设计 允许我们使用
  • 如何在保留合并更改的同时删除合并提交?

    我有来自我的存储库的提交日志 您可以看到 合并分支 到 提交 在这些提交之后 分支被合并 我需要删除合并提交 但不放弃更改 默认变基不显示合并提交 如果您想应用提交的更改而不包括合并提交 正如 Roland Smith 指出的那样 这通常被
  • 访问SVHN数据集中hdf5组的两种方式有什么区别?

    我需要读取 SVHN 数据集并尝试读取第一张图像的文件名 我在理解 HDF5 的结构方面有点困难 尤其是在理解 SVHN 数据集的层次结构 结构方面 这两种读取图像名称的方法有什么区别 我在这个脚本的定义中遇到了方法1getName 功能
  • 如何检查Canvas中的两个图形(线)是否发生碰撞?

    所以我一直在开发一款跑步火柴人游戏 不幸的是 我遇到了这个问题 我似乎无法弄清楚 如果名为障碍物的绘图穿过我的火柴人 我希望出现警报并说 游戏结束 然而 如果我的火柴人踢 他变成红色 并且障碍物接触到图纸的右脚 那么它会说 你赢了 任何帮助
  • VT100 ANSI 转义序列:获取屏幕尺寸、条件 ANSI

    当我在终端上调整大小时 它保持全屏 我想 有某种方法可以找出终端的屏幕尺寸 我怎样才能在 VT100 中做到这一点 使用 时 当我列出文件夹时 它会以蓝色显示文件夹 或者说不同的颜色 但是 如果将输出保存到文本文件 ls gt out tx
  • 如何根据发送者的身份使新消息显示在左侧/右侧? (无浮动)

    我正在尝试制作一个网页 根据用户 1 左文本区域 或用户 2 右文本区域 是否发送消息 黄色对话窗口中的消息显示在左侧或右侧 与消息在手机上的显示方式相同如今 通过发送消息的背景颜色可以区分消息的发送者 用户1为浅蓝色 用户2为紫色 我试图
  • 如何在同一个类(C++、MFC)中调用工作线程?

    这是我的代码 其中包含错误 void ClassA init HANDLE hThread data thread thread is an object of struct data hThread CreateThread NULL 0
  • 如何控制TextView何时将String发送到新行?

    当一个词出现在String from a TextView太大 无法与前面的单词放在同一行 它会跳到下一行 事实证明这非常有用 然而 这让我陷入了两难的境地 我的String出于我的特殊原因 需要在单词的每个字母之间有一个空格 并且在单词之
  • 当 Inno Setup 中的注册表值仅使用默认名称时,如何获取该值?

    我正在尝试使用 Inno Setup 的 Pascal 脚本从 Windows 注册表 本例中为 Google Sketchup 获取应用程序的安装目录 以便我可以在那里安装插件 该注册表项没有名称 在 Regedit 中只有 默认 我试过
  • Codeigniter result_array() 返回一行

    在我的表中 我有两行 但是当我print r the data该模型函数连接到它只返回数据库中的第二行 为什么 型号功能 function getAllUsers query this gt db gt get users foreach
  • 通过 GUI 将日期输入数据库,以便 FMDatabase 读取

    我有一组事件 在发布应用程序之前必须将其输入数据库 以便应用程序准备好从此数据库中读取数据 我看过一些类似这样的帖子 解释了如何将 NSDate 输入数据库以便可以读回 iPhone SQLite日期问题 https stackoverfl
  • 如何使用 WebApi2、OData 和 $expand 指定结果的形状

    当我将 OData 与特定的对象一起使用时 执行 AutoMapper 映射时遇到问题 select or expand values 使用 WebApi 操作 public IQueryable
  • 类型通过联合分配意味着什么?

    我正在读一篇文章 在 TypeScript 中 我们最强大的工具是条件类型 这是 因为他们有两个独特的能力 他们通过工会进行分配 它们使您能够使用 infer 关键字 在一般情况下以及在这种情况下 在工会上分配 意味着什么 期限分配性的指的