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> לפי הצורך. מקווה שזה עוזר; בהצלחה!

קישור למגרש משחקים