TypeScript 学習 part6

はじめに

こちらの本でTypeScriptの学習を進めています。

前回は、Hit&Blowにバリデーションを追加しました。今回は、その続きです。

コミット履歴はこちら

行ったこと

never型

getAnswerLengthというプライベートメソッドに、never型を追加しました。

  private getAnswerLength() {
    switch (this.mode) {
      case 'normal':
        return 3
      case 'hard':
        return 4
      default:
        const neverValue: never = this.mode
        throw new Error(`${neverValue} は無効なモードです。`)
    }
  }

型エイリアスの使用

モードをModeに代入することで、繰り返し使用できるようにしました。後で変更する際に、1箇所だけ変更を加えればいいというメリットもあります。

type Mode = 'normal' | 'hard'

class HitAndBlow {
  private readonly answerSource = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
  private answer: string[] = []
  private tryCount = 0
  private mode: Mode

  constructor(mode: Mode) {
    this.mode = mode
  }
// 以下省略
}

ユーザーがモードを選択できるようにした

コード

初期値の設定

class HitAndBlow {
  private readonly answerSource = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
  private answer: string[] = []
  private tryCount = 0
  private mode: Mode = 'normal'
  // 以下省略
}

ユーザーの入力を求める処理

  async setting() {
    this.mode = await promptInput('モードを入力してください。') as Mode
    const answerLength = this.getAnswerLength()
     // 以下省略
 }

settingメソッドの実行

  ;(async () => {
    const hitAndBlow = new HitAndBlow()
    await hitAndBlow.setting()
    await hitAndBlow.play()
    hitAndBlow.end()
  })()

次回

次回は、ユーザーがnormalとhard以外の文字列を入力した場合の対応や、コードのリファクタリングをしていきます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です