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()
.
Voici la discussion sur l'ajout de 'final' à TypeScript: https://github.com/Microsoft/TypeScript/issues/8306 –
@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
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). –