Задать вопрос
AshBlade
@AshBlade
Просто хочу быть счастливым

Возможно ли так передавать аргументы?

Пишу на тайпскрипте базовый абстрактный класс. У конструктора есть множество аргументов (около 7).
Хочу добавить перегрузку, которая принимает объект из этих аргументов (для удобства), примерно так:

class Sample {
   field1: number;
   field2: number;
   constructor(field1: number, field2: number) {
        this.field1 = field1;
        this.field2 = field2;
    }

    constructor(args: { field1: number, field2: number}) {
         this.field1 = args.field1;
         this.field2 = args.field2;
     }
}

// Пример создания
new Sample({ 
       field1: 123, 
       field2: 4555,
})


Но перегрузки конструктора запрещены:

Multiple constructor implementations are not allowed


Вопрос: можно ли такое реализовать и, если да, то как?

P.S. если такое нельзя, то думаю лучше оставить 2 вариант
  • Вопрос задан
  • 129 просмотров
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
AshBlade
@AshBlade Автор вопроса
Просто хочу быть счастливым
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,
});
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы