你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

RequireAtLeastOne type

RequireAtLeastOne 可帮助创建一个类型,其中接口 (的至少一个属性可以是需要存在) 的任何属性。

这之所以有效,是因为 TypeScript 的实用工具类型: https://www.typescriptlang.org/docs/handbook/utility-types.html 让我们来看看:

  • [K in keyof T]-? 此属性 (K) 仅当它与 T 的任何属性同名时才有效。
  • Required<Pick<T, K>> 在迭代中仅使用当前属性从 T 创建一个新类型,并将其标记为必需
  • Partial<Pick<T, Exclude<keyof T, K>>> 使用 T 的所有属性(从属性 K 除外)生成一个新类型。
  • & 是将 类型与中只有一个必需属性 Required<...> 与 中的所有可选属性结合在 Partial<...>一起。
  • [keyof T] 确保只允许 T 的属性。
type RequireAtLeastOne<T> = {
  [K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
}[keyof T]