プロを目指す人のためのTypeScript入門 読書メモ⑦ 第5章(1)
■ 思ったこと
TypeScriptでクラスを使う意味を探っていこう
■ 第5章 クラスの宣言と使用(5.1~5.1.11)
クラスを使うにはクラス宣言
- TypeScriptにおけるクラスって一種のオブジェクト
- そんで、クラスってnewしてオブジェクトを生成するもの!(ついでに、オブジェクトの中身がプロパティ)
- クラスによって生成されたオブジェクトがインスタンス
- クラス宣言の構文は
class クラス名{}
、実際に使うならconst 変数 = new クラス{}
でインスタンス化しましょDo it! - ・・つまり、{}の中で書かれる処理まで含めてクラス宣言というわけね
- {}の中ではプロパティ宣言したりメソッド作ったり
- アクセシビリティ修飾子(public、protected、private)もいつも通り使えますわよ。privateおさらい、使う側が知らなくていい情報(処理に使いたいだけの変数とか)を外に漏らさない術!
- プロパティ名に
#
つけてあげるとそれでもプライベートになる。こっちはJavaScriptにある機能だからより厳密なんだって#
つけたプロパティはcosole.logとかしても見れない- privateは見える
- 型引数も使える、クラス名のあとに<オリジナル型名>ってしてあげればOK、実行ごとに型変えられるアレですね!?
コンストラクタ
- も使えるぜ。newしたときにまず呼ばれるところだったね。それってオブジェクト作ってる最中に実行される操作らしい!
constructor(){}
みたいにメソッド宣言しないといけないらしい!javaと違う!- 引数受け取ってthisで初期化するのがサイテッキ、読み取り専用変数にも使える、オブジェクト作ってる途中のことだから。
- 引数に修飾子つけてあげるとプロパティ宣言を省略できる。同時にプロパティ宣言してると見なしてくれるのだ
- こんな感じで書いてもよくなる・・しかし!これはJavaScriptには存在しない構文らしい。そもそも修飾子がTypeScriptにしかないとな
class User { // name: string = ""; // age: number = 0; constructor(private name: string, private age: number) { // this.name = name; // this.age = age; } }
静的プロパティ・静的メソッド…って!?
- プロパティ・メソッドの前に
static
をつければ、インスタンスじゃなくて、クラスそのものに属するプロパティ・メソッドになる - インスタンス化しなくてもクラス名.プロパティとかクラス名.メソッドってやれば直に使えるって感じだけど…正直あんま使わん!
こっちもあるぞ!クラス式
- クラス宣言は
class クラス名{}
だったけど、クラス式はconst クラス名 = class {}
、クラスが変数に代入されるのさ - こうなると修飾子は使えなくなる、そうなんだ。
■ 感想
またクラスの呼び方忘れていた。クラスを呼んであげるにはインスタンス化するしかないのに、どうやって処理呼ぼう!?とあたふたしてしまった。私は愚かだ。でも@InjectすればDIされるからnewしなくてもいいのさ!これ、javaの話…なんかさ、仕事中に「クラス名 変数」だけ書かれてるの見て混乱してしまったよ。てか、水曜の禁煙デスゲームめちゃくちゃ面白かった、まなぶの目が。。!追いつめられる姿を笑いとして提供してくれてありがとう。