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.
