我正在构建一款纸牌游戏,有以下类型:
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 隐式具有“any”类型,因为“Rank”类型的表达式不能用于索引“IPowerCards”类型。类型“IPowerCards”上不存在属性“A”。
此错误消息对我来说没有意义,因为我确保 rank
变量(我用来访问 powerCards
对象的变量)的 >Rank
类型,这是我在 IPowerCards
类型定义中指定的类型。我哪里错了?谢谢
最佳答案
使用 Record
代替 IPowerCards
:
type IPowerCards = Record<Rank, any>
如果您想让属性可选:
type IPowerCards = {
[key in Rank]?: any
}
关于javascript - Typescript "Element implicitly has an ' any' 类型,因为类型 'Rank' 的表达式不能用于索引类型 'IPowerCards' ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71888834/