代码之家  ›  专栏  ›  技术社区  ›  dazzaondmic

Typescript“元素隐式具有'any'类型,因为'Rank'类型的表达式不能用于索引'IPowerCards'类型”

  •  0
  • dazzaondmic  · 技术社区  · 4 年前

    我正在制作一款纸牌游戏,有以下几种类型:

    type Rank = "A"| "2"| "3"| "4"| "5"| "6"| "7"| "8"| "9"| "T"| "J"| "Q"| "K";
    
    interface IPowerCards {
      [key: Rank]: any
    }
    

    我还尝试使用秩字符串访问以下对象:

    const powerCards: IPowerCards = {
      "A": {
        canPlayOnAnyCard: true,
        canChangeSuit: true,
      },
      "2": {
        canCounterPenaltyCard: true,
        penaltyAmount: 2,
      },
      ...,
    };
    

    此对象上的所有键都有效 Rank 类型。我正在尝试访问服务器上的值 powerCards 对象使用以下代码:

    const rank = getRank(card) as Rank;
    return rank && powerCards[rank]?.canCounterPenaltyCard
    

    然而,我得到了错误 Element implicitly has an 'any' type because expression of type 'Rank' can't be used to index type 'IPowerCards'. Property 'A' does not exist on type 'IPowerCards'. 这个错误消息对我来说没有意义,因为我正在确保 rank 变量,这是我用来访问 电源卡 对象,是 等级 类型,这是我在 IPowerCards 类型定义。我哪里做错了?谢谢

    1 回复  |  直到 4 年前
        1
  •  0
  •   Tobias S.    4 年前

    使用 Record 对于 IPowerCards 相反:

    type IPowerCards = Record<Rank, any>
    

    如果希望属性为可选属性:

    type IPowerCards = {
      [key in Rank]?: any
    }
    
    推荐文章