@AlexWeb6667
Web-дизайнер с опытом FullStack разработки

Как в typescript описать массив, содержащий в себе массив экземпляров от класса?

Всем доброго времени суток, только вхожу в TypeScript, базу вроде бы понял, а вот более сложные моменты пока понять и нагуглить не могу.

Скажем у меня есть класс

class TableSelection {
  static selectedClass: string = 'selected'
  group: object[]

  constructor() {
    this.group = []
  }

  select($cell) {
    this.clear()
    this.group.push($cell)
    $cell.addClass(TableSelection.selectedClass)
  }

  clear() {
    this.group.forEach(($selectedCell) => $selectedCell.removeClass(TableSelection.selectedClass))
    this.group = []
  }
}


В нем я описал что у меня будет массив объектов this.group(Экземпляры класса с своими методами), и когда начинаю перебирать этот массив в методе clear и вызывать методы экземпляров класса, TypeScript говорит мне что у типа object нет таких методов. Я так понимаю что мне нужно описать либо от какого класса экземпляры там будут лежать, либо описать методы которые будут в этом объекте. Подскажите пожалуйста как правильно описывать подобные конструкции
  • Вопрос задан
  • 388 просмотров
Решения вопроса 1
Kozack
@Kozack
Thinking about a11y
Ну, если прям как по учебнику, тогда вам нужно описать интерфейс, от которого будет зависеть класс TableSelection (один класс не должен напрямую зависеть от другого, так как это сложнее поддерживать).
Например так:
interface Cell {
    addClass(cssClass: string) : void
    removeClass(cssClass: string) : void
}

class TableSelection {
...


Ну, а далее вы просто указываете что свойство group это массив чего-угодно что соответствует интерфейсу Cell

interface Cell {
    addClass(cssClass: string) : void
    removeClass(cssClass: string) : void
}

class TableSelection {
  static selectedClass: string = 'selected'
  group: Cell[]

  constructor() {
    this.group = []
  }

  select($cell: Cell) {
    this.clear()
    this.group.push($cell)
    $cell.addClass(TableSelection.selectedClass)
  }

  clear() {
    this.group.forEach(($selectedCell) => $selectedCell.removeClass(TableSelection.selectedClass))
    this.group = []
  }
}


Пример готового кода
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@acwartz
Тут должна быть ваша реклама.
если работа с DOM, а не с классами то используйте вместо типа object, тип any.
Ответ написан
Ваш ответ на вопрос

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

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