any implícito por un índice de cadena
Element implicitly has an 'any' type because expression of type 'string' can't be used to index typeLas palabras del propio compilador. Sin traducir — es la cadena que pegaste en el buscador.
Indexaste un objeto con un `string` a secas, y el compilador no puede saber a qué propiedad te referías — el resultado sería `any`, y `strict` no lo deja pasar en silencio.
Reproducción
declare const obj: { a: number } declare const key: string const value = obj[key]
La compilación afirma que esto emite exactamente este código.
Por qué lo dice el compilador
`string` es toda cadena, y `obj` tiene exactamente una clave. El compilador no puede descartar `obj["tontería"]`, que no tiene tipo alguno, así que el resultado honesto es `any` — y bajo `noImplicitAny`, un `any` que no pediste es un error y no un agujero silencioso. El mensaje describe un hueco en lo que sabe, no un fallo en lo que escribiste.
Arreglos
- 01
declare const obj: { a: number } declare const key: keyof typeof obj const value = obj[key]
Acota la clave a las claves que existen. `keyof typeof obj` es `"a"`, e indexar con ella es exacto.
- 02
declare const obj: Record<string, number> declare const key: string const value = obj[key]
O di que el objeto de verdad acepta cualquier cadena. Una firma de índice es una promesa sobre todas las claves, y es la respuesta correcta cuando el objeto es un diccionario y no una forma fija.
Conclusión
Decide qué es el objeto: una forma fija que indexas por sus propias claves, o un diccionario que acepta cualquiera. La mayoría de estos errores son un objeto usado como ambas cosas.