Как клонировать объект с помощью ключей из интерфейса

#javascript #typescript

#javascript #typescript

Вопрос:

Допустим, у меня есть объект и интерфейс

 type A {
  one: string,
  two: number,
  three: string | undefined
}

const a: A = { one: 'test', two: 1, three: 'test'};

type B {
  one: string,
  three: number,
  four: number
}
  

Я хочу создать вызываемый объект B , который будет клонироваться A , но с общими ключами и с тем же типом

Итак, я хочу что-то вроде функции, которая при вводе ObjectA и TypeB поможет мне вернуть B = {one: 'test'}

Спасибо

Комментарии:

1. вы пробовали это: geeksforgeeks.org/lodash-_-clonedeep-method Lodash — хорошая библиотека для работы с объектом

2. const B = ({one} = A)

3. @bharatpatel спасибо за предложение, это выглядит великолепно, но я также ищу собственное решение для машинописи

4. определите свой тип как класс, и во время копирования вы можете выполнять итерации по прототипу

5. @StackSlave это работает только в том случае, если я знаю ключ «один». Я хочу иметь более общее решение

Ответ №1:

Вы можете использовать стандартное решение для этого, как показано ниже

const b = JSON.parse(JSON.stringify(a))

или

 const b = Object.assign({}, a);
  

Это приведет к клонированию объекта a и не будет содержать никакой ссылки объекта a на объект b после присвоения.

Для других вариантов см.

Ответ №2:

В случае, если вы хотите использовать собственное решение typescript, вы можете использовать Pick для выбора свойств от A до B

 type A = {
  one: string;
  two: number;
  three: string | undefined;
};

type B = Pick<A, "one">;

const b: B = {
  one: 'test'
};

const b2: B = {
  one: 'test'
  two: 'test'; // u'll get a warning
};
  

Комментарии:

1. привет, для этого мне нужно знать ключевое слово ‘one’, и я на самом деле ищу функцию, которая поможет мне создать объект