5
我试图在超类中实现一个方法,该方法应该可以在子类中使用,但不可更改。试想一下:在TypeScript中是否有相当于“密封”或“最终”的?
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
}
}
这显然是有问题的,因为我要确保没有子类曾经与比super.universalBehavior()
通话以外的任何实现universalBehavior()
。
下面是关于为TypeScript添加'final'的讨论:https://github.com/Microsoft/TypeScript/issues/8306 –
@MikeMcCaughan - 所以我想没有关键字。也许有人会发布某种解决方法。 – bubbleking
我见过[a'@ readonly'装饰器](https://www.sitepen.com/blog/2015/10/20/typescript-decorators/),它将使用['Object.freeze' ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze),但这不是一回事(它不允许对类进行任何修改)。 –