[英]TypeScript object type
我正在嘗試將我的 JavaScript 代碼轉換為 TypeScript。 我不知道如何翻譯該代碼:
const COLOR_WHITE = 0;
const COLOR_BLACK = 1;
const CASTLE_TYPE_SHORT = 0;
const CASTLE_TYPE_LONG = 1;
class Game {
constructor() {
this.castling_possibilities = {
COLOR_WHITE: {
CASTLE_TYPE_SHORT: true,
CASTLE_TYPE_LONG: true
},
COLOR_BLACK: {
CASTLE_TYPE_SHORT: true,
CASTLE_TYPE_LONG: true
}
}
}
getCastlingPossibility(color, type) {
return this.castling_possibilities[color][type];
}
}
我得到了這個代碼,但是有很多錯誤:
enum Color {
White,
Black
}
enum CastleType {
Short,
Long
}
class Game {
castling_possibilities: Object /* what member type is required? */
constructor() {
this.castling_possibilities = {
Color.White: {
CastleType.Short: true,
CastleType.Long: true
},
Color.Black: {
CastleType.Short: true,
CastleType.Long: true
}
}
}
getCastlingPossibility(color: Color, type: CastleType) : boolean {
return this.castling_possibilities[color][type];
}
}
我想要一個Color
的關聯數組和CastleType
的關聯數組,但我不知道該怎么做。 我需要什么類型的castling_possibilities
? 提前致謝!
首先,您不應該使用數字枚舉,因為它不安全(您可以為其分配任何數字)。 請改用字符串枚舉或字符串聯合。
這是使用字符串枚舉的解決方案:
enum Color {
White = 'white',
Black = 'black',
}
enum CastleType {
Short = 'short',
Long = 'long',
}
type Dict = {
[U in Color]: {
[T in CastleType]: boolean;
};
}
class Game {
castling_possibilities: Dict
constructor() {
this.castling_possibilities = {
[Color.White]: {
[CastleType.Short]: true,
[CastleType.Long]: true
},
[Color.Black]: {
[CastleType.Short]: true,
[CastleType.Long]: true
}
}
}
getCastlingPossibility(color: Color, type: CastleType) : boolean {
return this.castling_possibilities[color][type];
}
}
class Game {
castling_possibilities: Partial<Record<Color, Partial<Record<CastleType, boolean>>>>;
constructor() {
this.castling_possibilities = {
[Color.White]: { [CastleType.Long]: true, [CastleType.Short]: false },
[Color.Black]: { [CastleType.Long]: false, [CastleType.Short]: true }
};
}
getCastlingPossibility(color: Color, type: CastleType): boolean {
return this.castling_possibilities[color]![type]!;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.