export function omit( subject: Subject, keys: Key[], ) { const keySet = new Set(keys) return Object.fromEntries( Object.entries(subject).filter(([key]) => !keySet.has(key)), // hack: conditional type preserves unions ) as Subject extends unknown ? Omit : never }