Как присвоить в TS объект другому объекту?

В TypeScript (TS) вы можете присвоить объект другому объекту с помощью оператора присваивания =. Однако, в отличие от JavaScript, вы должны быть осторожны и учитывать различные аспекты типизации в TS.

1. Простое присваивание:

const obj1 = { name: 'John', age: 25 };
const obj2 = obj1;

В этом примере значения obj1 копируются в obj2. Оба объекта будут ссылаться на один и тот же участок памяти, и изменение одного объекта приведет к изменению другого. Поэтому, если вы изменили name или age в obj2, то это повлияет и на obj1 (и наоборот).

2. Глубокое копирование (Deep Copy):
Иногда вам может потребоваться создать полную копию объекта, чтобы не изменять исходный объект. Для этого вы можете использовать различные способы, например, использовать JSON методы JSON.stringify и JSON.parse. Например:

const obj1 = { name: 'John', age: 25 };
const obj2 = JSON.parse(JSON.stringify(obj1));

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

3. Нестрогая типизация:
Если вы хотите присвоить объект одного типа другому объекту другого типа, вы можете использовать нестрогую типизацию, используя оператор as. Например:

interface Person {
  name: string;
  age: number;
}

interface Employee {
  employeeId: string;
}

const person: Person = { name: 'John', age: 25 };
const employee = person as Employee;

В этом примере person типизирован как Person, а employee типизирован как Employee. Мы можем присвоить person переменной employee, но при этом мы теряем доступ к свойствам, которые не являются общими для обоих типов.

4. Строгая типизация:
Если вам необходимо присвоить объекту одного типа объект другого типа, вам придется использовать явное преобразование типов или создать новый объект с помощью конструктора или функции. Например:

interface Person {
  name: string;
  age: number;
}

class Employee {
  employeeId: string;

  constructor(public person: Person, employeeId: string) {
    this.employeeId = employeeId;
  }
}

const person: Person = { name: 'John', age: 25 };
const employee = new Employee(person, '123');

В этом примере создается новый объект Employee на основе person. При этом нужно использовать конструктор и передать person в качестве аргумента.

Вывод: Присваивание объекта другому объекту в TypeScript может быть реализовано разными способами, в зависимости от вашей конкретной ситуации и требований по типизации.