ペロハム大学

ヤルゾー

プロを目指す人のための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の話…なんかさ、仕事中に「クラス名 変数」だけ書かれてるの見て混乱してしまったよ。てか、水曜の禁煙デスゲームめちゃくちゃ面白かった、まなぶの目が。。!追いつめられる姿を笑いとして提供してくれてありがとう。