Я пишу на машинописном тексте и имею следующую диаграмму классов.
Классы FooDea , BarDea и SubDea имеют одинаковое тело (конструктор, функциональность исвойства), но различаются из-за своих родителей и типа интерфейса.Какова рекомендуемая стратегия, чтобы предотвратить дублирование кода, но при этом получить читаемый код?Когда IFooDaa, IBarDaa и ISubDaa все реализуют IBase и IDea, возможно ли сделать что-то вроде:
type Dea<T extends IBase> =
T extends IFoo ? FooDea<T> :
T extends IBar ? BarDea<T> :
T extends ISub ? SubDea<T>: never;
export class FooDea extends BaseDea<IFooDea> { }
export class BarDea extends BaseDea<IBarDea> { }
export class SubDea extends BaseDea<ISubDea> { }
export abstract class BaseDea<T extends Idea> extends Dea<T> {
// fields and properties
// constructor, with super statement
// functions and methods
}
Как бы я это сделал?Должен ли я даже сделать это?