@webjun

Почему я получаю undefined?

Приветствую, делаю сейчас для себя небольшой проект: юзер вводит блюдо и ему через Апи приходит рецепт. Решил использовать тайпскрипт, делаю запрос на сервер используя аксиос и описываю тип данных которые должны прийти с бэка, данные которые пришли заношу в переменную (в консоли приходит обьект который нужен) но дальше когда я хочу вывести эти данные на страницу я по какой-то причине получаю undefined и соответственно на странице ничего не отображается.

Пример кода:
const[recipes, setRecipes] = React.useState<Irecipe>();

  async function fetchApi(){
    try{
      const response = await axios.get<Irecipe>(`https://api.edamam.com/search?q=${query}&app_id=${ID}&app_key=${KEY}`);
      setRecipes(response.data);
      console.log(recipes)
    }catch(e: unknown){
      console.warn(e);
    }
  }

  React.useEffect(()=> {
    fetchApi()
  }, [query]);


Вот так я написал интерфейсы:

export interface IfetchApi{
config?: any,
headers?:any,
data: Idata[],
request?: number,
statusText?: string

}

export interface Idata {
count: number,
from: number,
hits: Irecipe,
more: boolean,
q: string,
}

export interface Irecipe{
calories: number,
cautions: any,
cuisineType: Array,
dietLabels: Array,
dishType: any,
healthLabels?: any,
image: string,
ingredientLines: Array,
ingredients: Iingredients[],
label: string,
mealType: Array,
shareAs: string,
source: string,
totalDaily: any,
totalNutrients: any,
totalTime: number,
totalWeight: number,
uri: string,
url: string,
yield: number
}

export interface Iingredients{
text: string,
quantity: number,
measure: string
}


Прикрепляю фото обьекта который получаю:
6320fb286e48b959590699.png
6320fb2ff3fe5111636009.png
6320fb35e057f418365412.png
6320fb3d03351296343483.png

Например когда я выведу в консоль: console.log(recipes) то получу обьект который прикрепил выше но когда я хочу получить более детальные данные console.log(recipes?.dishType) то получаю undefined .. В чем моя ошибка? Подозреваю что в описании типов
  • Вопрос задан
  • 615 просмотров
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Ну в комменте уже ответили, что приходит тебе не совсем то, что ты там в типе написал.
Рекомендую не писать руками интерфейсы для готового json, лучше тыкнуть в консоли на ответе "Copy object" и вставь в любой конвертер, который гуглится по "json to ts", например https://app.quicktype.io/. Так ты точно не ошибёшься, а потом уже можешь уточнить тип руками.

В идеале, конечно, неплохо бы каждый ответ от сервера считать unknown и прогонять через тайпгард, проверяя руками, что он соответствует типу, но это не частая практика, увы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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