我正在尝试将二十一点作为学习 TypeScript 的练习。当我运行程序时,玩家成功地从鞋子中获得了两张牌,但我收到了警告Argument of type 'Card | undefined' is not assignable to parameter of type 'Card'.这是我的代码:class Card { suit: string; value: number; name: string; constructor(suit: string, value: number, name: string) { this.suit = suit; this.value = value; this.name = name; } greet() { console.log(`This card is a ${this.value} of ${this.suit}`) }}class Deck { static suits = ["Diamonds", "Clubs", "Hearts", "Spades"] static cardTypes = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King", "Ace"] cards: Card[] = []; makeDeck() { let cards: Card[] = []; for (let i = 0; i < Deck.suits.length; i++) { for (let j = 0; j < Deck.cardTypes.length; j++) { let value = Deck.cardTypes[j]; let numValue: number; let name: string; if ( value === "Jack" || value === "Queen" || value === "King" ) { numValue = 10 } else if (value === "Ace") { numValue = 11 } else { numValue = parseInt(Deck.cardTypes[j]); } name = `${value} of ${Deck.suits[i]}` cards.push(new Card(Deck.suits[i], numValue, name)) } } return cards; } constructor() { this.cards = this.makeDeck() } presentDeck() { console.log(this.cards) }}class Shoe { numberOfDecks: number; cards: Card[] = []; constructor(numberOfDecks: number) { this.numberOfDecks = numberOfDecks this.cards = this.makeShoe() }错误在shoe.dealCard()最后的零件上。我不确定为什么该类型有两部分,Card 和 undefined。而且我不确定什么是未定义的。
1 回答
![?](http://img1.sycdn.imooc.com/53339fdf00019de902200220-100-100.jpg)
暮色呼如
TA贡献1853条经验 获得超9个赞
发生错误是因为this.cards.pop()可能在没有元素 ( )undefined时返回。使错误消失的一种方法是使用非空断言运算符。此运算符接受此表达式永远不会为 null 并且不再显示错误。this.cardsthis.cards === []!
dealCard() {
return this.cards.pop()!;
}
添加回答
举报
0/150
提交
取消