Когда вы хотите создать копию объекта в TypeScript, важно понимать разницу между поверхностной и глубокой копией. Неглубокая копия просто создает новую ссылку на исходный объект, а глубокая копия создает совершенно новый объект со своим собственным набором свойств. В этой статье мы рассмотрим различные методы копирования объектов без ссылок, гарантируя, что у вас будет полный контроль над скопированным объектом. Итак, давайте углубимся и попрощаемся с этими надоедливыми ссылками на объекты!
Метод 1: оператор расширения
Один из самых простых способов создания глубокой копии объекта — использование оператора расширения. Оператор распространения позволяет расширить свойства объекта в новый объект, эффективно создавая копию без каких-либо ссылок. Вот пример:
const originalObj = { name: 'John', age: 25 };
const copiedObj = { ...originalObj };
Метод 2: Object.assign()
Другой метод копирования объектов без ссылок — использование метода Object.assign(). Этот метод копирует значения всех перечислимых свойств из одного или нескольких исходных объектов в целевой объект. Вот как вы можете его использовать:
const originalObj = { name: 'John', age: 25 };
const copiedObj = Object.assign({}, originalObj);
Метод 3: JSON.parse() и JSON.stringify()
Вы также можете использовать синтаксический анализ JSON и преобразование в строки для создания глубокой копии объекта. Преобразуя исходный объект в строку JSON, а затем анализируя его обратно в объект, вы фактически создаете новый объект без каких-либо ссылок. Вот пример:
const originalObj = { name: 'John', age: 25 };
const copiedObj = JSON.parse(JSON.stringify(originalObj));
Метод 4: Lodash cloneDeep()
Если вы предпочитаете использовать библиотеку, Lodash предоставляет удобный метод под названием cloneDeep(), который создает глубокую копию объекта. Этот метод рекурсивно клонирует все вложенные свойства, обеспечивая полную копию без каких-либо ссылок. Сначала обязательно установите Lodash через npm или Yarn, а затем вы сможете использовать его следующим образом:
import cloneDeep from 'lodash/cloneDeep';
const originalObj = { name: 'John', age: 25 };
const copiedObj = cloneDeep(originalObj);
К этому моменту вы узнали несколько способов копирования объектов без ссылок в TypeScript. Предпочитаете ли вы простоту оператора расширения, универсальность Object.assign(), анализ JSON и подход к преобразованию в строки или даже использование возможностей такой библиотеки, как Lodash, у вас есть множество вариантов на выбор. Попрощайтесь со ссылками на объекты и наслаждайтесь полным контролем над скопированными объектами!