Ну, если прям как по учебнику, тогда вам нужно описать интерфейс, от которого будет зависеть класс
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 = []
}
}
Пример готового кода