我正在尝试在一个超类中实现一个方法,这个方法应该可以在子类中使用,但不能被修改。考虑以下代码:
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()
的东西。
final
的讨论:https://github.com/Microsoft/TypeScript/issues/8306 - Heretic Monkey@readonly
装饰器,该装饰器将在对象上使用Object.freeze
,但那不是同一件事情(它禁止对类进行任何修改)。 - Heretic MonkeyObject.hasOwnProperty.call(target, "some-property")
,用于检查属性是否来自对象本身而不是原型链。你可以使用相同的技巧,即使子类遮蔽了这个方法也没有关系。 - weaknespase