У меня есть файл типов с этими типами:
type IServiceItems = {
fields: {
name: string;
description: string;
logo: {
fields: {
file: {
url: string;
};
};
};
};
};
type ITechItems = {
fields: {
name: string;
logo: {
fields: {
file: {
url: string;
};
};
};
};
};
У меня есть страница, на которой я извлекаю данные с реквизитами SSR. Я пытаюсь передать этот реквизит детям. Но я получаю ошибку типа.
TSX-файл страницы:
interface Props {
services: IServiceItems[];
technologies: ITechItems[];
}
const Index = ({ services, technologies }: Props) => {
return (
<div>
<ServicesBlock services={...services} />
<TechnologiesBlock technologies={...technologies} />
</div>
);
};
Ошибка в свойствах сервисов и технологий:
(property) services: IServiceItems[]
Type '{ services: IServiceItems[]; }' is not assignable to type 'IntrinsicAttributes & IServiceItems[]'.
Property 'services' does not exist on type 'IntrinsicAttributes & IServiceItems[]'.
И, наконец, компонент:
const ServicesBlock = (services: IServiceItems[]) => {}
Я пытался использовать ...
при передаче параметров, но не помогло.
Получение данных:
export const getServerSideProps = async () => {
const services = await contentful.getEntries({ content_type: 'service' });
const technologies = await contentful.getEntries({ content_type: 'technology' });
return {
props: {
services: services.items,
technologies: technologies.items,
},
};
};
Вам нужно изолировать ошибку. Ваша добыча успешна? Попробуйте войти services
в page.tsx
. У вас также может быть проблема с ТС. Почему ваши интерфейсы называются массивами? Может быть, ваша проверка типа не работает, но выборка работает.
Вы не должны распространять свой массив services
при передаче его в качестве реквизита, если вы ожидаете массив (удалите ...
):
const Index = ({ services, technologies }: Props) => {
return (
<div>
<ServicesBlock services={services} />
<TechnologiesBlock technologies={technologies} />
</div>
);
};
Кроме того, измените объявление ServicesBlock
на следующее:
interface Props {
services: IServiceItems[];
}
const ServicesBlock = ({ services }: Props) => {}
Где звонок
getStaticProps
? Вы просто пропустили это? Это механизм получения данных.