RequireAtLeastOne type
RequireAtLeastOne membantu membuat jenis di mana setidaknya salah satu properti antarmuka (dapat berupa properti apa pun) diperlukan untuk ada.
Ini berfungsi karena jenis utilitas TypeScript: https://www.typescriptlang.org/docs/handbook/utility-types.html Mari kita periksa:
[K in keyof T]-?
properti ini (K) hanya valid jika memiliki nama yang sama dengan properti T.Required<Pick<T, K>>
membuat jenis baru dari T hanya dengan properti saat ini dalam iterasi, dan menandainya sebagaimana diperlukanPartial<Pick<T, Exclude<keyof T, K>>>
membuat jenis baru dengan semua properti T, kecuali dari properti K.&
adalah apa yang menyatukan jenis dengan hanya satu properti yang diperlukan dariRequired<...>
dengan semua properti opsional dariPartial<...>
.[keyof T]
memastikan bahwa hanya properti T yang diizinkan.
type RequireAtLeastOne<T> = {
[K in keyof T]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<keyof T, K>>>
}[keyof T]