Ниже приведен пример кода (полиморфный), взятый из угловой каркас с использованием синтаксиса TypeScript,
export abstract class AbstractControlDirective {
...
}
AbstractControlDirective
подтипы
export abstract class NgControl extends AbstractControlDirective {
...
}
export abstract class ControlContainer extends AbstractControlDirective {
...
}
export declare abstract class ControlContainer extends AbstractControlDirective {
...
}
export declare abstract class NgControl extends AbstractControlDirective {
...
}
NgControl
подтипы
export class NgModel extends NgControl implements OnChanges, OnDestroy {
...
}
export class FormControlDirective extends NgControl implements OnChanges {
....
}
export class FormControlName extends NgControl implements OnChanges, OnDestroy {
...
}
export declare class FormControlDirective extends NgControl implements OnChanges {
...
}
export declare class FormControlName extends NgControl implements OnChanges, OnDestroy {
...
}
export declare class NgModel extends NgControl implements OnChanges, OnDestroy {
...
}
В целом, существует много ситуаций, которые сталкиваются с новыми требованиями, чтобы добавить очевидный внешний вид супертипа в промежуточные слои иерархии классов, который вводит разрыв в подтипы, если не используется какой-либо шаблон проектирования. Использование шаблона проектирования может сделать иерархию классов менее подверженной ошибкам, но нарушает структуру иерархии.
Чтобы избежать этой проблемы, можем ли мы поддерживать эту иерархию без использования ключевого слова extends
? TypeScript является структурно типизированным ...