export function omit( subject: Subject, keys: Key[], // hack: using a conditional type preserves union types ): Subject extends any ? Omit : never { const result: any = {} for (const key in subject) { if (!keys.includes(key as unknown as Key)) { result[key] = subject[key] } } return result }