Gente eu preciso de ajuda com TypeScript. Eu tenho um tipo chamado Header, que foi gerado automaticamente pela lib do Contentful (CMS que estou usando). Só que ainda faltavam algumas chaves no tipo do Contentful, então eu criei este tipo "Header" dos snippets. O problema é que o TypeScript está lendo estes tipos como "never".
//src/types/contentful/TypeHeader.ts
import type { Asset, Entry } from "contentful";
export interface TypeHeaderFields {
logo?: Asset;
background?: Asset;
}
export type TypeHeader = Entry<TypeHeaderFields>;
//src/types/index.ts
import * as Contentful from "./contentful";
import type { EntryFields, Asset } from "contentful";
interface Fields {
fields: {
logo: {
fields: {
title: EntryFields.Symbol;
description: EntryFields.Symbol;
file: Asset;
};
};
background: {
title: EntryFields.Symbol;
file: Asset;
};
};
}
export type Header = Contentful.TypeHeaderFields &
Fields & {
contentTypeId: "header";
};
// src/components/header.component/index.astro
---
import { contentfulClient } from '../../lib/contentful';
import type { Image as ImageType } from "../../types/image"
import type { Entry } from "contentful";
import type { TypeHeader } from "../../types/contentful/TypeHeader"
import { Image, imageConfig } from 'astro:assets';
import type { Header } from "../../types/"
type HeaderEntries = {
logo: {
src: string,
alt: string,
size: {
width: number,
height: number
}
},
background: {
src: string,
alt: string,
size: {
width: number,
height: number
}
},
}
const { items } = await contentfulClient.getEntries<Header>({
content_type: "header",
});
let props = {};
items.map((item) => {
const logoField = item.fields.logo;
const backgroundField = item.fields.background;
props = {
logo: {
src: logoField.fields.file.url ?? "", //O TypeScript retorna o erro "Property 'fields' does not exist on type 'never'.ts(2339)". Este erro acontece nos outros campos também.
alt: logoField.description ?? "",
size: {
width: logoField.fields.file.details?.image.width ?? "",
height: logoField.fields.file.details?.image.height ?? ""
}
},
background: {
src: backgroundField?.fields.file.url ?? "",
alt: backgroundField?.description ?? "",
size: {
width: logoField.fields.file.details?.image.width ?? "",
height: logoField.fields.file.details?.image.height ?? ""
}
}
};
});
const { logo, background } = props as HeaderEntries;
---
<header>
<div class="flex justify-center bg-transparent">
<img
src={logo.src}
alt={logo.alt}
/>
</div>
<div>
<img
src={background.src}
alt={background.alt}
/>
</div>
</header>
Estou o dia todo tentando resolver este problema mas não acho solução. Agradeço desde já pela ajuda. https://github.com/kellysondias/lp-astro