javascript - 'StaticImageData' türü 'string' türüne atanamaz


Küçük öğrenme projem olan NextJS ve TypeScript üzerinde arayüzlerle uğraşıyorum. Halletmiş olduğumu düşünmüştüm ama Header.tsx dosyamda, Header bileşenimdeki src özelliği ile ilgili bir sorunla karşılaşıyorum. Şu hata mesajlarını almaya devam ediyorum

Type 'StaticImageData', 'string' türüne atanamaz. Beklenen tür, burada 'IntrinsicAttributes & ILogo & { children?: ReactNode; }' türünde tanımlanmış 'src' özelliğinden gelmektedir.

Çocuk bileşenlerini ve bunları üst bileşenden alt bileşene nasıl aktaracağımı anlamakta hâlâ tam olarak kendime güvenmiyorum, bu da böyle bir hatayı biraz sinir bozucu hale getirdi.

Aşağıya kodu ekledim ve hem mevcut sorunu çözmek için hem de gelecekte bunu hafifletmenin yolları için önerilerinizi bekliyorum.

Header.tsx

import React from "react";
import Navbar from "./Navbar/Navbar";
import Logo from "../Logo";
import companyLogo from "../../../public/assets/images/logo.png";
import { ILogo } from "../../types/headerType";

const Header = () => {
  return (
    <div className="container flex justify-between h-16 max-w-full bg-pink-400 h-100px">
      <Logo className="object-cover" src={companyLogo} />
      <Navbar />
    </div>
  );
};

export default Header;

Logo.tsx

import Image from "next/image";
import Link from "next/link";
import React, { FunctionComponent } from "react";
import { ILogo } from "../types/headerType";

const Logo: FunctionComponent<ILogo> = ({ src }) => {
  return (
    <div>
      <Link href="/">
        <a>
          <Image
            src={src}
            alt="Logo"
            className="object-cover cursor-pointer"
            height="100px"
            width="320px"
            layout="intrinsic"
          />
        </a>
      </Link>
    </div>
  );
};

export default Logo;

headerType.ts

export interface ILogo {
  //   image: HTMLImageElement;
  src: string;
  className?: string;
}

Cevap #1

Resminizi içe aktardıktan sonra sonucu konsolunuzda yazdırabilirsiniz. Eğer [object object] gibi bir şey alırsanız, o zaman nesnedeki belirli src özelliğini sormanız gerekir:

<Logo className="object-cover" src={companyLogo.src} />

Cevap #2

Yerel bir statik resim geçiyorsunuz, bu yüzden bunu tipe eklemeniz gerekiyor, bunun yerine

export interface ILogo {
  //   image: HTMLImageElement;
  src: string;
  className?: string;
}

Bunu alabilirsin

export interface ILogo {
  //   image: HTMLImageElement;
  src: string | StaticImageData;
  className?: string;
}

İlgili makaleler