Búsqueda de sitios web

javascript - TS | El elemento tiene implícitamente un tipo 'any' porque la expresión de tipo 'string' no se puede usar para indexar el tipo 'Record'


Tengo un DTO, que estoy usando para mapear a través de una de sus claves

EL DTO y el enum SecurityMode:

enum SecurityMode {
  mode1 = 'mode1’,
  mode2 = 'mode2’,
  mode3 = 'mode3’
}

export default SecurityMode;
import SecurityMode from 'shared/common/enums/SecurityMode';

export default interface IAuthUser {
  security: Record<SecurityMode, boolean>;
}

EL ERROR:

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'Record<SecurityMode, boolean>'.
  No index signature with a parameter of type 'string' was found on type 'Record<SecurityMode, boolean>'.ts(7053)

Aquí está la parte del código, se está presentando el error:

{user && user.security && user.security[securityKey] && ( // The error is on user.security[securityKey]
          <Fragment>
            <span">{securityKey}</span>
          </Fragment>
        )}

Entonces, ¿cómo elimino este error? ¿Cuál es su problema?

Intenté cambiar la seguridad a:

security: Record<{[key: string]: SecurityMode, boolean}>

pero el Record Genérico solo acepta 2 argumentos, y cuando los pongo en una variable, obtengo que los estoy usando como valores. POR FAVOR AYUDA..

Respuesta #1

  user.security[securityKey as SecurityMode]

El problema no es el tipo de user.security sino el tipo de securityKey, ya que eso puede ser cualquier cadena, incluso una que no sea parte de user.security. Dado que undefined/false tienen el mismo significado aquí (supongo), es seguro convertir la cadena al tipo de unión literal de cadenas, entonces el error debería desaparecer.

Artículos relacionados