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

    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)