@b4rbos
web

Как типизировать props массива объектов?

Получаю по апи массив объектов и передаю их в data.
Получаю data в компоненте Catalog, но как только указываю ему тип пропса, начинает ругаться "Свойство movies не существует в типе IData". Понятно, что как-то указал коряво тип, но не пойму как надо.

App

import React from "react";
import { UploadOutlined, UserOutlined, VideoCameraOutlined } from "@ant-design/icons";
import { Layout, Menu, theme } from "antd";
import { Search } from "./components/Search";
import { Catalog } from "./components/Catalog";
import { IData } from "./types/data";

const { Header, Content, Footer, Sider } = Layout;

const App: React.FC = () => {
  const [data, setData] = React.useState<IData[]>([]);

  React.useEffect(() => {
    fetch("https://kinopoiskapiunofficial.tech/api/v2.2/films", {
      method: "GET",
      headers: {
        "X-API-KEY": "**********************",
        "Content-Type": "application/json",
      },
    })
      .then((res) => res.json())
      .then((data) => {
        setData(data.items);
      })
      .catch((err) => console.log(err));
  }, []);

  const {
    token: { colorBgContainer },
  } = theme.useToken();

  return (
    <Layout>
      <Catalog movies={data} />
    </Layout>
  );
};

export default App;

Type

export interface IData {
  countries?: { country: string }[];
  genres?: { genre: string }[];
  imdbId?: string;
  kinopoiskId?: number;
  nameEn?: null;
  nameOriginal?: string;
  nameRu: string;
  posterUrl?: string;
  posterUrlPreview?: string;
  ratingImdb?: number;
  ratingKinopoisk?: number;
  type?: string;
  year?: number;
}

Catalog

import React from "react";
import { IData } from "../../types/data";

const Catalog: React.FC<IData[]> = ({ movies }) => {
  return (
    <>
      {movies.map((item: any) => (
        <div>{item.nameRu} </div>
      ))}
    </>
  );
};

export { Catalog };
  • Вопрос задан
  • 270 просмотров
Решения вопроса 1
React.FC<{ movies: IData[] }>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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