Сейчас делаю приложение в связке реакт + тс, на основную страницу получаю список разных валют по апи которые идут блок за блоком, но хочу, чтоб при нажатии на блок мне открывалась страница с более подробной информацией об этой валюте. Все вышло, но столкнулся с проблемой типизации стейта. С any все работает, но хочется сделать нормально.
const [currency, setCurrency] = React.useState<any>({}); //ожидаю обьект с сервера
const fetchCurrency = async function () {
try {
const response = await axios.get<any>(url);
setCurrency(response.data);
} catch (e) {
alert(e);
}
};
Код выше работает, данные с сервера приходят и можно продолжать но хочется типизировать стейт и запрос как нужно.
Кодпен с типизацией обьекта который я ожидаю с сервера(интерфесы сделаны при помощи конвертера поэтому ошибок быть не должно) :
https://codepen.io/IvaLu/pen/JjZjMgo?editors=0010
Далее я типизирую стейт и запрос но уже вылазит ошибка
const [currency, setCurrency] = React.useState<Pokedex>({}); //ожидаю обьект с сервера
const fetchCurrency = async function () {
try {
const response = await axios.get<Pokedex>(url);
setCurrency(response.data);
} catch (e) {
alert(e);
}
};
Ошибка при типизации стейта:
Argument of type '{}' is not assignable to parameter of type 'Pokedex | (() => Pokedex)'.
Можно исправить и написать так:
const [currency, setCurrency] = React.useState<Pokedex | any>({});
Но это уже костыли и хочется написать нормально.