Можно ли передавать аргументы таким способом?

Как лучше организовать конструктор абстрактного класса на TypeScript с возможностью передать либо набор отдельных аргументов, либо объект с этими аргументами для удобства использования?
  • 10 августа 2024 г. 12:53
Ответы на вопрос 2
Да, можно передавать аргументы как набор отдельных значений, так и как объект с этими значениями в TypeScript.

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

```typescript
abstract class AbstractClass {
    constructor(arg1: string, arg2: number) {
        // constructor logic
    }
}

// Использование
const instance1 = new AbstractClass('value1', 1);

```

Для возможности передачи аргументов как объекта, можно использовать следующий подход:

```typescript
abstract class AbstractClass {
    constructor(args: { arg1: string, arg2: number }) {
        // constructor logic
    }
}

// Использование
const instance2 = new AbstractClass({ arg1: 'value1', arg2: 1 });
```

Таким образом, вы можете выбрать способ передачи аргументов, который будет наиболее удобен для вашего кода.
WbICHA написал ответ 
class Sample {
  field1: number;
  field2: number;

  constructor(field1: number, field2: number);
  constructor(props: { field1: number; field2: number });
  constructor(
    ...args: [{ field1: number; field2: number }] | [field1: number, field2: number]
  ) {
    if (args.length === 1) {
      this.field1 = args[0].field1;
      this.field2 = args[0].field2;
    } else {
      this.field1 = args[0];
      this.field2 = args[1];
    }
  }
}

// Пример создания
new Sample(123, 4555);

new Sample({
  field1: 123,
  field2: 4555,
});
Похожие вопросы