bub*_*ing 15 inheritance final sealed typescript typescript2.0
我正在尝试在超类中实现一个方法,该方法应该可以在子类中使用,但不能更改.考虑一下:
export abstract class BaseClass {
universalBehavior(): void {
doStuff(); // Do some universal stuff the same way in all sub classes
specializedBehavior(); // Delegate specialized stuff to sub classes
}
protected abstract specializedBehavior(): void;
}
Run Code Online (Sandbox Code Playgroud)
我的意图是BaseClass的任何子类不仅可以省略实现universalBehavior()
,甚至不允许提供实现.这在TypeScript中是不是可能?当我省略子类中的实现时,Intellisense会抱怨.我能做的最好的就是:
export class SubClass extends BaseClass {
universalBehavior(): void {
super.universalBehavior();
}
specializedBehavior(): void {
// sub class' implementation
}
}
Run Code Online (Sandbox Code Playgroud)
显然这是有问题的,因为我必须确保没有子类实现universalBehavior()
除了调用之外的任何东西super.universalBehavior()
.
“密封方法”作为类型函数的只读属性的实现实例,在扩展类中尝试覆盖时会引发编译器错误:
abstract class BaseClass {
protected element: JQuery<HTMLElement>;
constructor(element: JQuery<HTMLElement>) {
this.element = element;
}
readonly public dispose = (): void => {
this.element.remove();
}
}
class MyClass extends BaseClass {
constructor(element: JQuery<HTMLElement>) {
super(element);
}
public dispose(): void { } // Compiler error: "Property 'dispose' in type 'MyClass' is not assignable to the same property in base type 'BaseClass'"
}
Run Code Online (Sandbox Code Playgroud)
TypeScript 2.0通过使用私有构造函数来支持“最终”类:
class A {
private constructor(){}
}
class B extends A{} //Cannot extend a class 'A'. Class constructor is marked as private.ts(2675)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7420 次 |
最近记录: |