@pinkhead_psd

Как можно обратиться к свойству объекта передав константу из useState?

Объект "wwCodes" хранит в себе значения типа: ключ число: свойство строка. Мне нужно обратиться к нему таким образом wwCodes[wwCode], wwCode это стейт в который просто передается цифра. Но происходит ошибка: Элемент неявно имеет тип "any", так как выражение типа "number" не может использоваться для индексации типа "{ 0: string; 1: string; 2: …}". Пробовал дженериком дать useState тип number - безуспешно.
Вот как выглядит кусок объекта:
const wwCodes = {
    0:'Clear sky',
    1:'Mainly clear',
    2:'Partly cloudy',
    3:'Overcast',
    45:'Fog',
}

Так я задаю стейт:
const [wwCode, setWwCode] = useState<number>(0);

И вот так пытаюсь обратиться:
<span>{wwCodes[wwCode]}</span>
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 2
@teenager_python
Я бы конечно сделал, вот таким образом
const [weatherCodes, setWeatherCodes] = useState({
  0: 'Clear sky',
  1: 'Mainly clear',
  2: 'Partly cloudy',
  3: 'Overcast',
  45: 'Fog',
});

И обратился бы потом
const partlyCloudy = weatherCodes[2];
Ответ написан
Комментировать
miraage
@miraage
Старый прогер
Проблема в том, что тип wwCodes при таком объявлении будет равен
{ 0: string, 1: string, 2: string, 3: string, 45: string }
, но никак не { [key: number]: string }, который ожидали бы.

Зависит от условия задачи.

wwCodes статически захардкожен в коде и не будет меняться на протяжении работы скрипта?
useState<keyof typeof wwCodes>

wwCodes - это некий generic объект, который мы получим извне (props, hooks, context), но мы предполагаем такую структуру?
type WwCodes = Record<number, string | undefined>
const wwCodes: WwCodes = ...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы