Учитывая эти два интерфейса:
interface IFoo {
foos: string[];
fnord: string;
}
interface IFooFlat {
foo: string;
fnord: string;
}
Я хочу преобразовать массив IFoo
в IFooFlat
с помощью этой функции карты:
const foos: IFoo[] = [
{
foos: [
"narf",
"poit"
],
fnord: "fnord"
}
];
const flattened: IFooFlat[][] = foos.map((fooObject: IFoo): IFooFlat[] => {
fooObject.foos.map((fooItem: string): IFooFlat => {
return {
...fooObject,
foo: fooItem,
};
});
});
Тем не менее, это приведет к ошибке:
Type '{ foo: string; foos: string[]; fnord: string; }' is not assignable to type 'IFooFlat'.
Object literal may only specify known properties, and 'foos' does not exist in type 'IFooFlat'.
Теперь я хочу удалить свойство foos
, но я не хочу явно применять каждое свойство (в моем случае из реального мира есть много других свойств), я хочу удалить только очень специфическое свойство, а именно foo.
Таким образом, я попытался создать клон и удалить свойство, но оно не сработало при выдаче той же ошибки:
const flattened = foos.map((foosObject: IFoo): IFooFlat[] => {
const clone = Object.assign(foosObject, {});
delete clone.foos;
return foosObject.foos.map((oneFooString: string): IFooFlat => {
return {
...clone,
foo: oneFooString,
};
});
});
Как я могу удалить свойство из объекта в TypeScript?