簡體   English   中英

TypeScript object型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM