У меня есть функция omit
, которая принимает объект в качестве параметра и список полей, которые нужно опустить, и возвращает объект без указанных свойств.
function omit<T>(instance: T, ...fields: Array<keyof T>) {
const output: any = {}
for (const [property, value] of Object.entries(instance)) {
if ((fields as string[]).includes(property)) continue
output[property] = value
}
return output
}
Я хочу определить тип возвращаемого значения как Omit<T, fields>
, где поля определяются аргументами, переданными в функцию. Возможно ли это? Я чувствую, что это может нарушить границу типа/значения, но мне бы хотелось иметь возможность это сделать.
Существует встроенная утилита типа Omit, вы можете использовать ее:
function omit<T extends object, K extends keyof T>(obj: T, ...fields: K[]): Omit<T, K> {
const result = { ...obj };
for (const field of fields) {
delete result[field];
}
return result as Omit<T, K>;
}
// Example usage:
interface Example {
a: number;
b: string;
c: boolean;
}
const example: Example = { a: 1, b: 'test', c: true };
const newObj = omit(example, 'a', 'c'); // newObj will have type { b: string }
console.info(newObj);