gpt4 book ai didi

typescript - 枚举作为构造函数中的参数会出错

转载 作者:行者123 更新时间:2023-12-04 07:52:08 25 4
gpt4 key购买 nike

我正在用纯 TypeScript 制作 Black Jack 应用程序,但是在卡片组内创建卡片时出现错误。到目前为止,我有 2 个类和 2 个枚举可以使用。

export enum Color {
Hearts = 0,
Spades,
Diamonds,
Clubs,
Count,
Hidden,
}

export enum Value {
Two = 0,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
Ten,
Knight,
Queen,
King,
Ace,
Count,
Hidden,
}

export class Card {
private color: Color;
private value: Value;
private isHidden: Boolean;

constructor(color: Color, value: Value) {
this.color = color;
this.value = value;
this.isHidden = true;
}
}
import { Card, Color, Value } from './Card';

export default class Deck {
private cards: Array<Card> = [];

public Deck = (): void => {
for (let colorIx = 0; colorIx < Color.Count; colorIx++) {
for (let valueIx = 0; valueIx < Value.Count; valueIx++) {
let c = new Card(Color[colorIx], Value[valueIx]);
this.AddCard(c);
}
}
};

public AddCard = (card: Card): void => {
this.cards.push(card);
};
}
这部分是出现问题的地方。
let c = new Card(Color[colorIx], Value[valueIx]);
它,给了我一个错误说:

Argument of type 'string' is not assignable to parameter of type'Color'.


但奇怪的是 Value 枚举根本没有给我一个错误,据我所知,它们的构造几乎相同。
有谁知道发生了什么?
为什么在构造函数中接受一个枚举(值)而另一个(颜色)不接受?

最佳答案

TypeScript 枚举有点不直观;查看您的代码 compiles to 可能会有所帮助看看为什么它会抛出它的错误。
服用 Color例如:TS 编译 Color到一个大致相当于:

const Color = {
[0]: "Hearts",
[1]: "Spades",
[2]: "Diamonds",
// ...
Hearts: 0,
Spades: 1,
Diamonds: 2,
// ...
}
所以当你这样做时 Color[0] , 你实际上得到的是文字字符串 "Hearts" ,这不是您想要的。从 number 转换对于相应的数字枚举,您实际上只需要使用 as 进行类型转换:
for (let colorIx = 0; colorIx < Color.Count; colorIx++) {
for (let valueIx = 0; valueIx < Value.Count; valueIx++) {
let c = new Card(colorIx as Color, valueIx as Value);
this.AddCard(c);
}
}
在引擎盖下, Color.Hearts被编译为只是 0 ,所以可以转换 0 as Color .
如果您想阅读更多, here are几个 SO 线程进一步讨论。

关于typescript - 枚举作为构造函数中的参数会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66906856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com