Niejawne any z indeksu tekstowego
Element implicitly has an 'any' type because expression of type 'string' can't be used to index typeWłasne słowa kompilatora. Nietłumaczone — to ten ciąg, który wkleiłeś w wyszukiwarkę.
Zaindeksowałeś obiekt zwykłym `string`, a kompilator nie umie stwierdzić, którą właściwość masz na myśli — wynikiem byłoby `any`, a `strict` nie przepuści tego po cichu.
Odtworzenie
declare const obj: { a: number } declare const key: string const value = obj[key]
Build potwierdza, że to emituje dokładnie ten kod.
Dlaczego kompilator tak mówi
`string` to każdy tekst, a `obj` ma dokładnie jeden klucz. Kompilator nie może wykluczyć `obj["bzdura"]`, które nie ma żadnego typu, więc uczciwym wynikiem jest `any` — a przy `noImplicitAny` `any`, o które nie prosiłeś, jest błędem, a nie cichą dziurą. Komunikat opisuje lukę w jego wiedzy, a nie błąd w tym, co napisałeś.
Naprawy
- 01
declare const obj: { a: number } declare const key: keyof typeof obj const value = obj[key]
Zawęź klucz do kluczy, które istnieją. `keyof typeof obj` to `"a"`, a indeksowanie nim jest dokładne.
- 02
declare const obj: Record<string, number> declare const key: string const value = obj[key]
Albo powiedz, że obiekt naprawdę przyjmuje dowolny tekst. Sygnatura indeksu to obietnica o każdym kluczu i jest właściwą odpowiedzią, gdy obiekt jest słownikiem, a nie ustalonym kształtem.
Wniosek
Zdecyduj, czym obiekt jest: ustalonym kształtem indeksowanym własnymi kluczami czy słownikiem przyjmującym cokolwiek. Większość tych błędów to obiekt używany jako jedno i drugie naraz.