TypeScript のoverride 修飾詞について

TypeScript には override 修飾詞というものがあります。

以下のように、親クラスのメソッドをオーバーライドしているときにこの修飾詞をつけることができます。

class Parent {
    getHoge(){
        return 'parent hoge'
    }
}

class Child extends Parent {
    override getHoge(){
        return 'child hoge'
    }
}

もし、親クラスに存在しないメソッドに対して override をつけたときはエラーになります。

class Parent {
    getHoge(){
        return 'parent hoge'
    }
}

class Child extends Parent {
    // This member cannot have an 'override' modifier because it is not declared in the base class 'Parent'.
    override getFoo(){
        return 'child foo'
    }
}

この override の使い所ですが、主に親クラスのメソッドを変更したときに、それに気付けるメリットがあります。

例えば、一つ目のサンプルで、Parent の getHoge を getHogeHoge に変更したとします。

class Parent {
    getHogeHoge(){
        return 'parent hogehoge'
    }
}

class Child extends Parent {
    // This member cannot have an 'override' modifier because it is not declared in the base class 'Parent'.
    override getHoge(){
        return 'child hoge'
    }
}

getHoge というメソッドが親クラスから消えたため、Child クラスでエラーになり気づくことができます。

もし、override をつけていない場合は、それに気づけないかもしれません。

その場合、new Child().getHogeHoge() が実行されると、Parent の getHogeHoge() が実行されてしまいます。

本当であれば、Child の getHogeHoge() が実行されることを期待しているので、バグになります。