TypeScript 入門の記録(63)プロを目指す人のためのTypeScript入門(47)第5章TypeScriptのクラス(7)
昨日は、日本UNIXユーザー会40周年記念イベント「コロナテックカンファレンス」が開催されました。私は、その会場サポートのため出張予定だったのですが、家族が COVID-19に感染したので出張をキャンセル。代わりに、登壇者として出張していた西原(@tomio2480)さんに、現地対応をお願いして、私はオンラインでサポートしました。今日は自宅で、TypeScriptのクラスの継承の続き、override修飾子について学習します。
クラスの継承
TypeScript のクラス内のプロパティやメソッドに付加する override 修飾子について学習します。
override修飾子
override修飾子は、クラス内のプロパティやメソッドがオーバーライドであることを宣言します。
override修飾子は、継承していないプロパティやメソッドに override修飾子を付加するとコンパイルエラーが発生します。クラスの継承では、override修飾子がなくてもオーバーライドできるので、必須ではありません。
noImplicitOverride コンパイラオプション
コンパイラオプション noImplicitOverride を有効にすると、オーバーライドには、必ずoverride修飾子を付加する必要があります。「オーバーライドしたつもりができていなかったり、オーバーライドするつもりがないのにオーバーライドしてしまった」というミスを防ぐ効果が期待できます。noimplicitOverrideは、デフォルトでは無効なので、tsconfig.json で有効にする必要があります。
tsconfig.json のnoImplicitOverride は、コメントアウトされているので
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
オーバーライドにoverride修飾子がなくてもエラーにはなりません。
これを、有効にします。
"noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
isAdultメソッドに override修飾子がないので、コンパイルエラーが発生しました。
なお、複数の修飾子がある場合は、記述する順番がきまっていて、public override のように書かないとエラーです。
まとめ
今日は、override修飾子と、コンパイルオプション noImplicitOverride の組み合わせの効果について学習しました。継承とオーバーライドのミス予防に override修飾子と noImplicitOverrideオプションをうまく活用したいと思います。