Estoy construyendo un juego de cartas y tengo los siguientes tipos:
type Rank = "A"| "2"| "3"| "4"| "5"| "6"| "7"| "8"| "9"| "T"| "J"| "Q"| "K"; interface IPowerCards { [key: Rank]: any }También tengo el siguiente objeto al que intento acceder con una cadena de clasificación:
const powerCards: IPowerCards = { "A": { canPlayOnAnyCard: true, canChangeSuit: true, }, "2": { canCounterPenaltyCard: true, penaltyAmount: 2, }, ..., }; Todas las claves de este objeto son tipos de Rank válidos. Estoy tratando de acceder a los valores en el objeto powerCards usando el siguiente código:
const rank = getRank(card) as Rank; return rank && powerCards[rank]?.canCounterPenaltyCard Sin embargo, aparece el error 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'. Este mensaje de error no tiene sentido para mí porque me aseguro de que la variable de rank , que es la variable que estoy usando para acceder al objeto powerCards , sea del tipo Rank , que es lo que especifiqué en mi definición de tipo IPowerCards . ¿Dónde me estoy equivocando? Gracias
Use un Record para IPowerCards en su lugar:
type IPowerCards = Record<Rank, any>Si desea tener las propiedades opcionales:
type IPowerCards = { [key in Rank]?: any }