节点打字稿:输入'"X" | “哦” | undefined' 不能分配给类型 '"X" | “哦”'。类型 'undefined' 不能分配给类型 '"X" | "O"'.ts(2322)

布格内夫内格

这是我的代码 -

const winnningCombos = [
  [0, 1, 2],
  [3, 4, 5],
  [6, 7, 8],
  [0, 3, 6],
  [1, 4, 7],
  [2, 5, 8],
  [0, 4, 8],
  [2, 4, 6],
];

export interface GameState {
  board: Array<'X' | 'O' | ''>;
  winner: 'X' | 'O' | 'TIE' | undefined;
  nextPlayer: 'X' | 'O' | undefined;
  errorMessage?: string;
}

export class TicTacToe {
  private board: Array<'X' | 'O' | ''> = ['', '', '', '', '', '', '', '', ''];
  player1 = 'X';
  player2 = 'O';
  nextPlayer: 'X' | 'O' = this.player1 as 'X';

  // Moving action
  move(space: number): GameState {
    console.log(space)
    if (this.board[space] !== '') {
      return {
        board: this.board,
        winner: this.getWinner(),
        nextPlayer: this.nextPlayer,
        errorMessage: `space already taken.`
      };
    }

    if (!this.getWinner()) {
      this.board[space] = this.nextPlayer;
    }

    const winner = this.getWinner();

    const nextPlayer = this.nextPlayer === 'X' ? 'O' : 'X';
    this.nextPlayer = winner === undefined ? nextPlayer : undefined;

错误在这里 - this.nextPlayer = winner === undefined ? nextPlayer : undefined;

    return {
      board: this.board,
      winner,
      nextPlayer: this.nextPlayer,
      errorMessage: undefined
    };
  }

  // Get game current state
  getGameState(): GameState {
    return {
      board: this.board,
      winner: this.getWinner(),
      nextPlayer: this.nextPlayer,
      errorMessage: undefined
    };
  }

  // Reset game action
  reset(): GameState {
    this.board = ['', '', '', '', '', '', '', '', ''];
    this.nextPlayer = 'X';
    return {
      board: this.board,
      winner: undefined,
      nextPlayer: this.nextPlayer,
      errorMessage: undefined
    };
  }

  // Get winner
  getWinner(): 'X' | 'O' | 'TIE' | undefined {
    const winningPlayer = winnningCombos.map((combo) => {
        if (combo.filter((space) => this.board[space] === 'X').length == 3) {
          return 'X';
        }

        if (combo.filter((space) => this.board[space] === 'O').length === 3) {
          return 'O';
        }

        return undefined;
      })
      .find((winner) => winner !== undefined);

    if (winningPlayer) {
      return winningPlayer;
    }

    const isTie = this.board.filter((space) => space !== '').length === 9;
    if (isTie) {
      return 'TIE';
    }

    return undefined;
  }
}

我正在尝试制作井字游戏,但我无法理解这个错误。

这是错误 -

Type '"X" | "O" | undefined' is not assignable to type '"X" | "O"'.
  Type 'undefined' is not assignable to type '"X" | "O"'.ts(2322)

………………………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………… …………………………………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………… ………………………………………………………………………………………………………………………………………………………… …………………………………………………………………………………………………………………………………………………………………………

雅各布布伦森

该错误试图告诉您该nextPlayer变量具有类型,"X" | "O"而您正试图将其设置undefined为无效值。

问题出在您定义类型的行上nextPlayer

nextPlayer: 'X' | 'O' = this.player1 as 'X';

您可以尝试更新nextPlayer要包含的类型undefined

nextPlayer: 'X' | 'O' | undefined = this.player1 as 'X';

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章