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