#angular #typescript #deep-copy
#angular #typescript #глубокое копирование
Вопрос:
Как я могу скопировать / клонировать класс typescript? Родительский класс содержит вложенный класс, а также коллекцию вложенного класса. Каждый тип класса содержит геттер. Я хотел бы, чтобы скопированный класс не потерял геттеры, а вложенный класс и элементы массива имели новую ссылку.
Мои проблемы в том, что JSON.parse(JSON.stringify( obj ));
не скопированы геттеры. и Object.assign(target, soure);
скопировали геттеры, но элементы массива сохраняют исходные ссылки.
Вот структура классов
export interface IClassA {
code: number;
description: string;
}
export class ClassA implements IClassA {
code: number;
description: string;
get descrAndCode() {
return 'Getter A ' this.description ':' this.code;
}
}
export interface IClassB {
name: string;
code: number;
classList: Array<ClassA>;
}
export class ClassB implements IClassB {
name: string;
code: number;
get codeAndName(): string {
return 'Getter B' this.code ':' this.name;
}
nested: ClassA;
classList: Array<ClassA>;
}
Ответ №1:
Другой способ глубокого копирования объекта с getter amp; setter
использованием метода Lodash clonedeep()
import * as cloneDeep from 'lodash/cloneDeep';
...
let foo = cloneDeep(bar);
Надеюсь, это поможет!
Комментарии:
1. Спасибо за ваш ответ, но я бы не хотел использовать внешние библиотеки.
2. Эта библиотека уже доступна в вашем angular. Вам не нужно устанавливать это
3. Я попробовал, это работает. Но я не видел, когда включал Lodash в Angular. Какая была первая версия, которая содержала это?
4. Что произойдет, если мы создадим проект без CLI, проект будет содержать его? И если мы создадим производственную сборку в этом случае, мы должны включить ее в package.json, я прав?
5. по умолчанию это требуется для всех приложений angular. без этой библиотеки ваш проект angular не будет работать. так что не беспокойтесь, вы можете его использовать