Учитывая, что здесь есть лучшая практика.
Кажется, что абстрактные методы создают более чистый визуальный интерфейс при реализации их в дочернем классе. Тем не менее, кажется, что это требует некоторого дополнительного кода кода
При использовании конструкторского подхода вы можете указать уникальный идентификатор только с помощью переменной. Тем не менее, требуется, чтобы вы вызывали супер-конструктор, что в противном случае вам не нужно (в любом случае в этом примере)
Просто интересно, есть ли здесь какая-то цель, которую я пропускаю. Потому что оба инкапсулируют то, что варьируется в дочернем классе.
// Enum
enum Id {
A,
}
// Abstract class requiring subclasses to implement method returning their ID
abstract class Abstract_Method {
abstract id(): Id;
log() {
console.log(this.id());
}
}
// Abstract class requiring subclasses to call the super constructor and specify their ID
abstract class Abstract_Constructor {
id: Id;
constructor(id: Id) {
this.id = id;
}
log() {
console.log(this.id);
}
}
// Child classes
class Child_Method extends Abstract_Method {
id(): Id {
return Id.A;
}
}
class Child_Constructor extends Abstract_Constructor {
constructor() {
super(Id.A);
}
}
// Test
new Child_Method().log();
new Child_Constructor().log();