less than 1 minute read

学んだこと

Abstract クラス

  • 継承先でしか使えない関数を定義することができる
// abstractを使う場合は、クラス名の前にabstractをつける
abstract class Person {
  name: string;
  // 変数の前につける
  readonly id: number = 31

  // 引数設定時にアクセス指定子の後ろにつける
  constructor(public readonly name: string){
  }

  // thisにPersonを設定する
  greeting(this: Person){
    console.log(this.name)
  }

  // abstractをつけることで、継承先に必ず定義しなければいけない関数になる
  abstract explainJob(): void;
}

const quill = new Person("Quill");
const anotherQuill: {
  greeting: quill.greeting
}

anotherQuill.greeting();

シングルトン

  • private をコンストラクタをつけてシングルトンを実装することができる。
    • シングルトンはクラスから 1 つしかインスタンスを生成出来ないようにする仕組み
  • static なゲッターを用意し、その中でインスタンスを渡すようにすることでシングルトンを実現することができる。
class Person {
  private static instance: Person;
  name: string;
  readonly id: number = 31

  constructor(public readonly name: string){
  }

  // staticなゲッターを用意する
  static getInstance(){
    if(Person.instance) return Person.instance;
    Person.instance = new Person("Quill");
    return Person.instance;
  }
}


インタフェース

  • オブジェクトの型に名前をつけることができる仕組み
  • インタフェースと Type の違い
    • インタフェース
      • 型に名前をつける事ができる
      • 定義できる型はオブジェクトとクラスの型
      • 拡張することができる
      • 見やすい
    • Type
      • 無名で作られた型に参照のため別名を与える
      • 全部の型を参照できる

インタフェースはこう使う

  • 定義名の前に interface をつけるだけ
    • type と書き方は一緒
interface Human {
  name: string
  age: number;
}

const human: Human = {
  name: "Quill",
  age: 38
}

let developer: Human;

メソッドをオブジェクトの型に指定する方法

  • クラスや Type で宣言している方法と同じやり方で指定できる
  • 関数名(引数名: 型名, ...):戻り値;
interface Human {
  name: string
  age: number;
  greeting(message: string):void;
}

const human: Human = {
  name: "Quill",
  age: 38
  greeting(message: string){
    console.log(message)
  }
}

let developer: Human;

implementsを使用して、クラスに対してinterfaceの条件を適用させる方法

// typeでもOK
interface Human {
  name: string
  age: number;
  greeting(message: string):void;
}

// 上記の宣言で使っている変数や関数をクラスで定義する必要がある。
class Developer implements Human {
  constructor(public name: string, public age: number)
  greeting(message: string) {
    console.log("hello")
  }
}