我正在尝试在超类中实现一个方法,该方法应该可以在子类中使用,但不能更改。考虑一下:
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;
}
我的意图是,BaseClass的任何子类不仅可以自由地省略universalBehavior()
的实现,而且甚至不被允许提供实现。 TypeScript还不可能吗?当我在子类中省略实现时,Intellisense会抱怨。我似乎可以做的最好的事情是:
export class SubClass extends BaseClass {
universalBehavior(): void {
super.universalBehavior();
}
specializedBehavior(): void {
// sub class' implementation
}
}
显然,这是有问题的,因为我必须确保没有子类可以实现除调用universalBehavior()
之外的任何方法来实现super.universalBehavior()
。>
我正在尝试在超类中实现一个方法,该方法应该可以在子类中使用,但不能更改。考虑一下:导出抽象类BaseClass {UniversalBehavior():void ...
不,在撰写本文时还没有。对于这种关键字,有一个建议正在考虑中,但是可能会实施,也可能永远不会实施。
“密封方法”的实现黑客实例,作为类型函数的只读属性,在扩展类中尝试覆盖时会引发编译器错误:
// I use this workaround:
export default class CreateHandler extends BaseHandler {
// final prop used as method
public readonly create = (blueprint: Blueprint): Response<Record> => {
return blueprint.create();
};
// normal method
public store(blueprint: Blueprint): Response<Record> {
return this.response(blueprint.create());
}
}