У меня есть целевой класс, как это:
export interface person{
name: string;
age: string;
//and another 40 properties
}
У меня есть более крупный исходный объект, такой как:
export interface BigPerson{
name: string;
age: string;
//and another 100 properties
}
У моей цели есть все свойства источника, кроме одного (зарплата).
Как я могу получить исходные данные для сопоставления, используя деконструкцию JavaScript или оператор распространения?
Могу ли я попробовать что-то вроде
let {personObj: person} = bigPersonObj
если я использую общие свойства, то я должен написать 30-строчный код
let {name,age,race,all my 30 properties} : ...bigPersonObj
Есть ли какие-либо ярлыки с использованием спреда или деконструкции?
Это звучит как проблема JavaScript.
Поскольку интерфейсы являются просто типами, вы не можете использовать их во время выполнения.
Поэтому вам нужно создать конкретный объект, чтобы выбрать его у большого человека, однако это невозможно сделать с помощью деконструкции или распространения, мой лучший ответ - создать массив свойств и преобразовать их в объект.
const reduceToPerson = (sum, element) => {
sum[element] = bigPersonObj[element];
return sum;
});
const person = ["name", "age", ...].reduce(reduceToPerson, {});
Вы также можете сделать 30 свойств, как вы хотите
const {name, age, ...}: person = bigPersonObject;
Однако вы не можете действительно использовать этот код по сравнению с массивом.
BigPerson
наследовал отPerson
?