15 lines
437 B
TypeScript
15 lines
437 B
TypeScript
// eslint-disable-next-line import/no-unused-modules
|
|
export function omit<Subject extends object, Key extends PropertyKey>(
|
|
subject: Subject,
|
|
keys: Key[],
|
|
// hack: using a conditional type preserves union types
|
|
): Subject extends any ? Omit<Subject, Key> : never {
|
|
const result: any = {}
|
|
for (const key in subject) {
|
|
if (!keys.includes(key as unknown as Key)) {
|
|
result[key] = subject[key]
|
|
}
|
|
}
|
|
return result
|
|
}
|