TypeScript - מהו האלמנט הנייטרלי עבור סוגי חפיפה?


בתוך סוג איחוד, never הוא האלמנט הנייטרלי, כלומר never | T=T.

דרך נוספת לראות זאת היא שעבור קבוצת סוגים T=[T_1, ..., T_n], סוג האיחוד T_1 | ... | T_n ניתן על ידי T[number]. עבור קבוצת סוגים ריקה [], [][number] מניב never שהוא סוג האיחוד של קבוצת סוגים ריקה.

איזה סוג הוא האלמנט הנייטרלי עבור סוגי חיתוך? כלומר, איזה סוג מובנה N מניב N & T=T עבור סוג כלשהו T ולכן הוא סוג החיתוך של קבוצה ריקה?

ערוך

הרציונל מאחורי השאלה שלי היה לבנות טיפ עזר רקורסיבי כדי לחצות את כל הטיפים בסוג של טופל. ראה את התשובה שלי למטה…

תשובה #1

רק הבנתי את זה בעצמי:

לסוג איגוד, type NeutralUnion<T>=never | T זהה ל-T.

לסוג חיתוך, type NeutralIntersection<T>=unknown & T זהה ל-T.

אם כך, בדומה לבניית type UnionOfTupleElements<T>=T[number], אנחנו יכולים לבנות:

type IntersectionOfTupleElements<T extends unknown[]> = 
  T extends [infer U, ...infer V] 
    ? U & IntersectionOfTupleElements<V> 
    : unknown;

זה נותן:

IntersectionOfTupleElements<[]> = unknown
IntersectionOfTupleElements<[T]> = T
IntersectionOfTupleElements<[T1, T2]> = T1 & T2