@webjun

Как валидно описать массив обьектов?

Я получаю через Апи некую информацию и хочу через интерфейс описать типы данных но столкнулся с трудностью их описания.
Пример того, что я получаю:

{
  "page": 1,
  "results": [
    {
      "adult": false,
      "backdrop_path": "/p1F51Lvj3sMopG948F5HsBbl43C.jpg",
      "genre_ids": [28, 12, 14],
      "id": 616037,
      "original_language": "en",
      "original_title": "Thor: Love and Thunder",
      "overview": "After his retirement is interrupted by Gorr the God Butcher, a galactic killer who seeks the extinction of the gods, Thor enlists the help of King Valkyrie, Korg, and ex-girlfriend Jane Foster, who now inexplicably wields Mjolnir as the Mighty Thor. Together they embark upon a harrowing cosmic adventure to uncover the mystery of the God Butcher’s vengeance and stop him before it’s too late.",
      "popularity": 10993.015,
      "poster_path": "/pIkRyD18kl4FhoCNQuWxWu5cBnM.jpg",
      "release_date": "2022-07-06",
      "title": "Thor: Love and Thunder",
      "video": false,
      "vote_average": 6.7,
      "vote_count": 1657
    },

Я начал делать вот так:

export interface FilmType{
    page: number;
    results: Array<any>{
     
    }

}

Если делать через any, то суть теряется.
  • Вопрос задан
  • 112 просмотров
Решения вопроса 3
wapster92
@wapster92
Сделай второй интерфейс для объекта в массиве results
export interface FilmType{
    page: number;
    results: ТвойИнтерфейс[];
}
Ответ написан
Комментировать
@Scoo909010
А тебе точно нужно описывать интерфейс того, что приходит снаружи? Можешь ли ты дать гарантию, что завтра будет приходить тот же ответ с бэка, а не кардинально другой? Типизировать внешние источники - это гнилая затея, если нет кодогенератора ,описывающего типы сущностей API, которую ты используешь.

В данном случае будет логичнее сделать нормализацию данных в тип, который тебе нужен, к примеру, вместо
"results": [
    {
      "adult": false,
      "backdrop_path": "/p1F51Lvj3sMopG948F5HsBbl43C.jpg",
      "genre_ids": [28, 12, 14],
      "id": 616037,
      "original_language": "en",
      "original_title": "Thor: Love and Thunder",
      "overview": "After his retirement is interrupted by Gorr the God Butcher, a galactic killer who seeks the extinction of the gods, Thor enlists the help of King Valkyrie, Korg, and ex-girlfriend Jane Foster, who now inexplicably wields Mjolnir as the Mighty Thor. Together they embark upon a harrowing cosmic adventure to uncover the mystery of the God Butcher’s vengeance and stop him before it’s too late.",
      "popularity": 10993.015,
      "poster_path": "/pIkRyD18kl4FhoCNQuWxWu5cBnM.jpg",
      "release_date": "2022-07-06",
      "title": "Thor: Love and Thunder",
      "video": false,
      "vote_average": 6.7,
      "vote_count": 1657
    },

Можно сделать это
foundedFilms: [
{
title: data.original_title, 
releaseDate: data.release_date,
description: data.overview 
}
]
Ответ написан
MvcBox
@MvcBox
Software Developer [C/C++/JS(for Node.js)/etc]
webjun, небольшое дополнение, для рантайм валидации данных от "внешних" источников можете использовать эту библиотеку - https://www.npmjs.com/package/typescript-is
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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