Bagikan melalui


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 diperlukan
  • Partial<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 dari Required<...> dengan semua properti opsional dari Partial<...>.
  • [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]