2017-03-15 242 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

不,在写这篇文章的时候没有。有一个关于这样一个关键字的提案仍在考虑之中,但可能会或可能不会实施。

相关问题