Обращение к свойству объекта JSON в React / TypeScript

возникла проблема следующего рода:

Есть JSON-объект:

{
    "Samara" : {
        "lat":53.195873,
        "lon":50.100193
    },
    "Tolyatti" : {
        "lat":53.507836,
        "lon":49.420393
    },
    "Saratov" : {
        "lat":51.533557,
        "lon":46.034257
    },
    "Kazan" : {
        "lat":55.796127,
        "lon":49.106405
    },
    "Krasnodar" : {
        "lat":45.035470,
        "lon":38.975313
    }
}

Я пытаюсь обратиться к конкретному полю:

setLon(Cities[city].lon)

Где 'city' я получаю через

const [city, setCity] = useState<any>()

Но получаю ошибку следующего рода:

Element implicitly has an 'any' type because expression of type 'string' can't be used to index type '{ Samara: { lat: number; lon: number; }; Tolyatti: { lat: number; lon: number; }; Saratov: { lat: number; lon: number; }; Kazan: { lat: number; lon: number; }; Krasnodar: { lat: number; lon: number; }; }'. No index signature with a parameter of type 'string' was found on type '{ Samara: { lat: number; lon: number; }; Tolyatti: { lat: number; lon: number; }; Saratov: { lat: number; lon: number; }; Kazan: { lat: number; lon: number; }; Krasnodar: { lat: number; lon: number; }; }'.

Я понимаю, что ошибка заключается в том, что я не могу итерировать объект ключом такого типа. Но я не понимаю, как можно исправить эту проблему. Задание типа 'string' не дает ничего полезного.


Ответы (1 шт):

Автор решения: Илья Богачев

Удалось решить проблему следующим образом:

type Key = keyof typeof Cities

const [city, SetCity] = useState<Key>('defaultCity')

Где "Cities" это JSON объект с городами

→ Ссылка