TypeScript - איך להסיר מאיחוד?
בהינתן איחוד, האם אפשר להסיר איחוד?
type V = { cat: string } | { dog: string }
type X = Omit<V, 'dog'>
const exampleA: X = { cat: '23456' }
const exampleB: X = { dog: '23456' }
תשובה #1
בהתאם למקרה השימוש שלך, תוכל להגדיר את ExcludeWithKeys<T, K> כך:
type ExcludeWithKeys<T, K extends PropertyKey> = Exclude<T, Partial<Record<K, any>>>;
או השווה
type ExcludeWithKeys<T, K extends PropertyKey> = T extends { [P in K]?: any } ? never : T;
והשתמש בזה:
type X = ExcludeWithKeys<V, 'dog'>;
// type X = { cat: string }
const exampleA: X = { cat: '23456' }; // okay
const exampleB: X = { dog: '23456' }; // error
אני מניח שזה מה שאתה רוצה לדוגמת הקוד. שים לב שסביר שיש הרבה מקרים קיצוניים ולכן כדאי שתתאים את ExcludeWithKeys<T, K> לפי הצורך. מקווה שזה עוזר; בהצלחה!
קישור למגרש משחקים
