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]