удалить Dynami c ненужные свойства в объекте json - PullRequest
0 голосов
/ 26 мая 2020

У меня есть объект todo из примера, это мой ожидаемый объект

foo ={
  name:'F',
  lastName: 'JOI',
  address:{
    street:'where?'
  }
}

, и я получил все эти поля с другими свойствами, которые я хочу удалить, например, это объект, который я получаю

bar ={
  name:'F',
  lastName: 'JOI',
  address:{
    street:'where?'
  },
  more:'temp',
  prop:'should remove'
} 

Есть ли способ удалить ненужное без свойства l oop foreach? Я использую TypeScript, если это может помочь

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Нет.

TypeScript проверяет соответствие типов, но не предоставляет никакой утилиты для перебора свойств типа, потому что все аннотации типов исчезают во время компиляции.

Если вы хотите удалить несколько ключей, эта информация должна будет присутствовать на уровне «JS», потому что «уровень TS» ​​(типы, интерфейсы и т. д. c) компилируется, поэтому вам придется иметь где-то простой JS объект или массив со всеми ключами, которые нужно удалить (или оставить). Возможные реализации:

// keep only the keys you want
const bar = {
  name: bar.name,
  lastName: bar.lastName,
  address: bar.address,
}

// same but with a helper
const keepProps = (src, keys) => Object
  .entries(src)
  .reduce(
    (dst, [key, value]) => {
      if (keys.includes(key)) dst[key] = value;
      return dst;
    },
    {}
  );
const bar = keepProps(foo, ['name', 'lastName', 'address']);

// remove unwanted keys
const bar = { ...foo }; // spread is required to create a different object reference
delete bar.more;
delete bar.prop;

Что касается требования «нет для l oop», это будет невозможно, если вы захотите выполнить несколько раз одну и ту же операцию, это будет либо явное l oop или l oop, скрытое синтаксисом, например { ...obj } или Array.filter.

0 голосов
/ 26 мая 2020

Самый простой способ - написать для него код напрямую:

const foo: YourType = {
    bar.name,
    bar.lastName,
    bar.address,
    bar.street
};

// Use `foo`

Это также имеет то преимущество, что в TypeScript он безопасен для типов; если вы попытались получить свойство, которое не является членом YourType или не существует на bar, вы получите сообщение об ошибке от TypeScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...