Как правильно инициализировать объект с разным набором полей в Typescript?

В TypeScript есть несколько способов для инициализации объекта с разным набором полей. Давайте рассмотрим каждый из них.

1. Использование необязательных полей:
Вы можете определить все поля объекта как необязательные, путем добавления вопросительного знака (?) после имени поля. Затем вы можете инициализировать объект, указывая только нужные поля. Все остальные поля будут иметь значение undefined.

Пример:

   interface MyObj {
     field1?: string;
     field2?: number;
   }

   const obj: MyObj = { field1: "value1" };
   console.log(obj); // { field1: "value1", field2: undefined }

2. Использование оператора Partial:
Оператор Partial позволяет определить тип с необязательными полями на основе существующего типа. Вы можете использовать Partial для создания типа, где все поля являются необязательными. Затем вы можете инициализировать объект, указывая только нужные поля. Все остальные поля будут иметь значение undefined.

Пример:

   interface MyObj {
     field1: string;
     field2: number;
   }

   const partialObj: Partial<MyObj> = { field1: "value1" };
   console.log(partialObj); // { field1: "value1", field2: undefined }

3. Использование спред-оператора:
Спред-оператор (...) позволяет вам копировать все свойства из одного объекта в другой. Вы можете использовать его для создания нового объекта, который содержит только необходимые поля.

Пример:

   interface MyObj {
     field1: string;
     field2: number;
   }

   const originalObj: MyObj = { field1: "value1", field2: 2 };
   const newObj: MyObj = { ...originalObj, field1: "new value1" };
   console.log(newObj); // { field1: "new value1", field2: 2 }

4. Использование фабричных функций:
Вы можете использовать фабричные функции для создания объектов с разным набором полей. Фабричная функция может принимать определенные параметры и возвращать объект с заданными полями.

Пример:

   interface MyObj {
     field1: string;
     field2: number;
   }

   function createObj(field1: string, field2?: number): MyObj {
     return { field1, field2 };
   }

   const obj1 = createObj("value1");
   console.log(obj1); // { field1: "value1", field2: undefined }

   const obj2 = createObj("new value1", 2);
   console.log(obj2); // { field1: "new value1", field2: 2 }

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