@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 .. В чем моя ошибка? Подозреваю что в описании типов
  • Вопрос задан
  • 783 просмотра
Решения вопроса 1
Aetae
@Aetae Куратор тега JavaScript
Тлен
Ну в комменте уже ответили, что приходит тебе не совсем то, что ты там в типе написал.
Рекомендую не писать руками интерфейсы для готового json, лучше тыкнуть в консоли на ответе "Copy object" и вставь в любой конвертер, который гуглится по "json to ts", например https://app.quicktype.io/. Так ты точно не ошибёшься, а потом уже можешь уточнить тип руками.

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

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

Похожие вопросы