你当前正在访问 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]