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),但這不是一回事(它不允許對類進行任何修改)。 –