≪ Today I learned. RSS購読
公開日
タグ
TypeScript
著者
ダーシノ(@bc_rikko)

private constructorで目的別にインスタンス化する

TypeScriptでconstructorをprivateにすることで、目的別にインスタンスを生成できる。

class AccountManager {
  static readonly #Free = 0
  static readonly #Premium = 100
  readonly #point: number

  // 外部からはインスタンス化できない
  private constructor(point: number) {
    this.#point = point
  }

  add(point: number) {
    return new AccountManager(this.#point + point)
  }

  // 目的別でstaticのファクトリメソッドを用意する
  static createFreeAccount() {
    return new AccountManager(this.#Free)
  }
  static createPremiumAccount() {
    return new AccountManager(this.#Premium)
  }
}

const freeAccount = AccountManager.createFreeAccount()
const free2 = freeAccount.add(100)

const premiumAccount = AccountManager.createPremiumAccount()
const premium2 = premiumAccount.add(100)