我正在使用react dropzone在我的简单应用程序中上传多个图像。为了显示哪种类型的图像被删除,我用TypeScript做了一个单独的组件。但Next.js图像源代码显示错误,如类型:
'{ src: string; alt: string; }' is not assignable to type 'IntrinsicAttributes & ImageProps'.
Type '{ src: string; alt: string; }' is not assignable to type 'ObjectImageProps'.
Types of property 'src' are incompatible.
Type 'string' is not assignable to type 'StaticImport'.
RenderFiles.ts:
import { IFile } from "../../libs/types";
import { sizeInMb } from "../../libs/sizeInMb";
import { FunctionComponent } from "react";
import Image from "next/image"
const RenderFile: FunctionComponent<{
file: IFile;
}> = ({ file: { formate, sizeInBytes, name } }) => {
return (
<div>
<Image src={`/images/${formate}.png`} alt="image"/>
<span>{name}</span>
<span>{sizeInMb(sizeInBytes)}</span>
</div>
);
};
export default RenderFile;
types.ts:
export interface IFile {
name: string;
sizeInBytes: number;
formate: string | number;
id?: string;
}
src prop 我错在哪里了?
4条答案
按热度按时间kkbh8khc1#
问题是
next/image
的Image
需要相当复杂的类型ImageProps
作为它的 prop :因为你不是从本地导入文件中导入图像,所以你剩下的唯一结构是
StringImageProps
。为了符合这个结构,你必须提供以下 prop 集之一:两种变体都可以用可选的
placeholder
(不是“模糊”类型)或必需的placeholder: 'blur'
* 和 *blurDataURL: string
来扩展。并且只有在此之后,您才可以将原生
image
的属性提供为alt
。xmd2e60i2#
导入
ImageLoaderProps
的类型为我解决了这个问题。示例:
2fjabf4q3#
我省略了
placeholder
、blurDataURL
和layout
。我还将src
显式地设置为字符串。有关此问题的更多信息:https://github.com/vercel/next.js/issues/26735mklgxw1f4#
只需将string转换为any