見出し画像

TypeScript 入門の記録(64)プロを目指す人のためのTypeScript入門(48)第5章TypeScriptのクラス(8)

 2週続けてk8sに入門してきましたが、今日は TypeScriptのクラスの継承の続き、private プロパティについてもう少し掘り下げて学習します。


クラスの継承

 前回は、override識別子を中心に継承について学習しました。クラスのプロパティの扱いにTypeScriptならではの仕様があるので、丁寧に見ていきます。

privateと#識別子の違い

 クラスの宣言で最初に学習したときには、なぜ private 修飾子と #識別子の2種類があるのか深く考えていなかったのですが、クラスの継承の学習の中で、それぞれがどのような機能を持っているか理解できました。

#付きのプロパティはクラスごとに独立している。private プロパティは、コンパイル後privateではなくなる
#識別子のプライベートプロパティは実行時もプライベート、private識別子はコンパイル時のみプライベート

そもそも、private 識別子はTypeScript独自のもので、コンパイル時にアクセス権のチェックはされるが、コンパイル後に出力された JavaScriptには private識別子は付かず、実行時は publicプロパティになるというところは、注意が必要だと思いました。#識別子のプロパティはJavaScriptのES2015以上で有効な仕様で、実行時にもプライベートプロパティとして扱われます。特別な事情がない限り、#識別子の方を使うほうが安全ではないかと思いました。

implements キーワード

implements キーワードというと、Javaの Interfaceの実装を思い出しますが、TypeScriptでは、あるクラスの部分型としてクラスを定義する場合に使用するんですね。機能としては、implementsで指定されたクラスの部分型であることをクラス宣言で明示することで、コンパイル時に部分型関係のチェックができるようになります。部分型関係も型推論で決定されるものをわざわざ書かなくても目的の機能を実装できると思いますが、明示することでミスを減らすという意図を持って使えると効果的だと思いました。

まとめ

ここで、やっとクラスの継承の節の学習まで進みました。次は、this の扱いです。JavaScriptで、このthisは何を指しているか?に迷うときがあるので、この機会にしっかり理解したいと思います。





この記事が気に入ったらサポートをしてみませんか?