Reactjs 对象或布尔值如何在Typescript中声明类型
在React中遇到此类型声明问题Reactjs 对象或布尔值如何在Typescript中声明类型,reactjs,typescript,Reactjs,Typescript,在React中遇到此类型声明问题 interface MessageCardProps { message: { id: string; title: string; content: string; attachments: string[]; interest_count: number; }; } const MessageCard: FC<MessageCardProps> = ({ message: { id, titl
interface MessageCardProps {
message: {
id: string;
title: string;
content: string;
attachments: string[];
interest_count: number;
};
}
const MessageCard: FC<MessageCardProps> = ({
message: { id, title, content, attachments, interest_count },
}) => {
// ERROR: Type 'string | false' is not assignable to type 'boolean | { url: string; }'.
const image: { url: string } | boolean =
attachments.length > 0 ? attachments[0] : false;
return (
{/* Property 'url' does not exist on type 'true | { url: string; }'.*/}
{image && <img className={style.img} src={image.url} alt="timeline" />}
);
};
export default MessageCard;
接口消息cardprops{
信息:{
id:字符串;
标题:字符串;
内容:字符串;
附件:字符串[];
利息:数目;
};
}
const MessageCard:FC=({
消息:{id、标题、内容、附件、兴趣\计数},
}) => {
//错误:类型“string | false”不可分配给类型“boolean |{url:string;}”。
常量图像:{url:string}|布尔值=
附件长度>0?附件[0]:false;
返回(
{/*属性“url”在类型“true”{url:string;}上不存在。*/}
{image&&}
);
};
导出默认消息卡;
声明常量图像类型的正确方法是什么?它可以是具有URL属性的对象,也可以是布尔值。我猜您希望仅在设置了附件[0]时才设置图像 如果是,我会这样打字。(有一些最快捷、更简单的方法可以做到这一点,但这段代码不支持类型联合和类型联合的用法):
const附件:数组=[“/test”]
接口IImage{url:string | boolean}
常量图像:IImage=attachments.length>0?{url:attachments[0]}:{url:false}
返回(
{image&&typeof image.url=='string'&&image.url!==''&&(我有一个有效的url)}
)
第一个问题是附件[0]
将返回字符串,而不是带有url
属性的对象。因此,您可以使用类型string | boolean
。您希望将其包装到对象中的具体原因是什么
如果使用string | boolean
,则可以执行src={image}
编辑:
您甚至可以通过根本不使用布尔值,并且使用null
是一个虚假的值这一事实来改进这一点。那你就可以这么做了
const image: string = attachments.length > 0 ? attachments[0] : null;
return (
{image && <img className={style.img} src={image} alt="timeline" />}
);
现在,要获得第一张图像,您可以执行以下操作:
const image: string = attachments.length > 0 ? attachments[0].URL : null;
仍在接收:
Type'string | null'不可分配给Type'string'。
。附件包含以下信息:```“附件”:[{“URL”:“URL”,}]``@MapMyMind然后MessageCardProps
中的附件
具有错误的类型定义。它应该是附件:{URL:string}[]
。然后可以使用attachments.length>0?附件[0]。URL:null
另外,是否使用strictNullChecks?然后image需要是string或null,如下面的const image:string | null=…
没错,接口中的声明是错误的。将附件:字符串[]
更改为附件:{URL:string}[]代码>。谢谢
interface MessageCardProps {
message: {
id: string;
title: string;
content: string;
attachments: {URL: string}[];
interest_count: number;
};
}
const image: string = attachments.length > 0 ? attachments[0].URL : null;