2017-03-15 175 views
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()

+1

下面是關於爲TypeScript添加'final'的討論:https://github.com/Microsoft/TypeScript/issues/8306 –

+0

@MikeMcCaughan - 所以我想沒有關鍵字。也許有人會發布某種解決方法。 – bubbleking

+0

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

回答

4

不,在寫這篇文章的時候沒有。有一個關於這樣一個關鍵字的提案仍在考慮之中,但可能會或可能不會實施。

相關問題