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() が実行されることを期待しているので、バグになります。
最近のコメント