@yossiz אמר בTS: הגדרת interface לאובייקט המכיל מופעים של קלאס גנרי:
הראשון תקין. למה? איפה מתועד התנהגות זו?
נראה לי שהבנתי, יש שתי רמות של טייפים ב-TS, יש את ה-declared type וה-observed type. ה-declared type משפיע על ה-assignability וה-observed type משפיע על השימוש בפועל בערך.
השמה של ערך לתוך משתנה יכול להשפיע על ה-observed type על ידי מנגנון שנקרא type narrowing.
דוגמה:
מקור:
https://www.typescriptlang.org/docs/handbook/2/narrowing.html#assignments
לכן בשורה זו:
const param1: A | B = { field1: 1 }למרות שה-declared type הוא A | B אבל יש מיד type narrowing על ידי ההשמה.