RequireAtLeastOne type
RequireAtLeastOne permet de créer un type où au moins une des propriétés d’une interface (peut être n’importe quelle propriété) doit exister.
Cela fonctionne en raison des types d’utilitaires de TypeScript : https://www.typescriptlang.org/docs/handbook/utility-types.html Examinons-le :
-
[K in keyof T]-?cette propriété (K) n’est valide que si elle a le même nom que toute propriété de T. -
Required<Pick<T, K>>crée un nouveau type À partir de T avec uniquement la propriété actuelle dans l’itération, et le marque comme requis -
Partial<Pick<T, Exclude<keyof T, K>>>crée un nouveau type avec toutes les propriétés de T, à l’exception de la propriété K. -
&est ce qui unit le type avec une seule propriété requise deRequired<...>avec toutes les propriétés facultatives dePartial<...>. -
[keyof T]garantit que seules les propriétés de T sont autorisées.
type RequireAtLeastOne<T> = {
[K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
}[keyof T]