2017-03-15 4 views
5

J'essaie d'implémenter une méthode dans une super classe qui devrait être disponible, mais non modifiable, dans les sous-classes. Considérez ceci:Existe-t-il un équivalent à "sealed" ou "final" dans 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; 
} 

Mon intention serait que toute sous-classe de BaseClass serait non seulement libre d'omettre la mise en œuvre de universalBehavior(), mais pas même permis de fournir une mise en œuvre. N'est-ce pas (encore) possible en TypeScript? Intellisense se plaint quand j'omets l'implémentation dans mes sous-classes. Le mieux que je peux sembler faire est la suivante:

export class SubClass extends BaseClass { 
    universalBehavior(): void { 
     super.universalBehavior(); 
    } 

    specializedBehavior(): void { 
     // sub class' implementation 
    } 
} 

Il est évident que cela pose problème parce que je dois veiller à ce qu'aucune sous-classe implémente jamais universalBehavior() avec autre chose qu'un appel à super.universalBehavior().

+1

Voici la discussion sur l'ajout de 'final' à TypeScript: https://github.com/Microsoft/TypeScript/issues/8306 –

+0

@MikeMcCaughan - Donc, je suppose qu'il n'y a pas de mot-clé. Peut-être que quelqu'un postera une solution de contournement de quelque sorte. – bubbleking

+0

J'ai vu l'utilisation de [un décorateur @ @ readonly] (https://www.sitepen.com/blog/2015/10/20/typescript-decorators/), qui utilisera ['Object.freeze' ] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze) sur l'objet, mais ce n'est pas la même chose (il interdit toute modification à la classe). –

Répondre

4

Non, au moment d'écrire ces lignes, il n'y en a pas. Il y a une proposition pour un tel mot-clé qui est toujours en cours d'examen, mais qui pourrait ou ne pourrait jamais être mise en œuvre.