2022.04.25(更新日: 2025.07.12)
      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以外の文字列を入力した場合の対応や、コードのリファクタリングをしていきます。
コメントを残す