2017-03-15 22 views
5

スーパークラスのメソッドを実装しようとしていますが、サブクラスで使用できるようにする必要がありますが、変更はできません。この考えてみましょう:TypeScriptに "sealed"または "final"と同等の機能がありますか?

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が苦情を言います。私は、サブクラスは、これまでsuper.universalBehavior()への呼び出し以外でuniversalBehavior()を実装していないことを確認する必要があるため明らかにこれには問題がある

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

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

:私が行うように見えることができる最高のはこれです。

+1

ここでは、「final」をTypeScriptに追加する方法について説明します:https://github.com/Microsoft/TypeScript/issues/8306 –

+0

@MikeMcCaughan - キーワードがないと思います。おそらく、誰かが何らかの回避策を投稿するだろう。 – bubbleking

+0

私は['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

いいえ、この執筆時点ではありません。このようなキーワードはまだ検討されていますが、実装されていない可能性があります。

関連する問題