TypeScript ts(2322)报错:'"X"|"O"|undefined'不可分配给'"X"|"O"'类型
错误原因
你在TicTacToe类中声明nextPlayer属性时,定义的类型为 'X' | 'O',该类型不允许接收undefined值。但报错行的代码逻辑中,当winner存在时,会将undefined赋值给this.nextPlayer,类型不匹配因此触发TS2322报错。
你定义的GameState接口中nextPlayer的类型已经包含了undefined,类属性的类型定义和业务逻辑、接口定义都不匹配。
解决方案
根据你的业务需求可以任选以下两种方案:
- 方案一:修改类属性的类型定义,和接口、业务逻辑保持一致
把类中nextPlayer的声明代码修改为:
这个方案更符合你当前的逻辑:游戏决出胜负/平局后,就不存在下一个玩家,nextPlayer: 'X' | 'O' | undefined = this.player1 as 'X';nextPlayer设为undefined符合业务场景。 - 方案二:不允许
nextPlayer为undefined,调整赋值逻辑
如果你希望nextPlayer始终保持X/O的值,只需要调整报错行的赋值逻辑,游戏结束后不修改nextPlayer即可:// 原报错行替换为以下代码 if (winner === undefined) { this.nextPlayer = nextPlayer; }
内容的提问来源于stack exchange,提问作者user16657995
相关产品推荐
相关产品推荐

