[英]How to fix error with TypeScript interface?
我有一个 TypeScript 问题。
我在 state 中设置了某个接口或空的 object 将到达那里。 我从这个state获取组件的信息。但是这个组件发誓state中不能有一个空的state因为接口。 请告诉我,如何配置才能使 TypeScript 不发誓并且错误消失。 谢谢!
const OneNews: FC<NewsObjectInterface> = ({image, title, createdAt, preview, description}) => {
return (
<>
<Header/>
<div className="single-blog one-news">
<div className="single-blog-img">
<img src={image} alt={`Image for ${title}`}/>
</div>
<div className="blog-meta">
<span className="date-type">
<i className="bi bi-calendar"></i>{createdAt}
</span>
</div>
<div className="blog-text">
<h4>{title}</h4>
<p>{preview}</p>
<p>{description}</p>
</div>
</div>
<Footer/>
</>
)
}
export default OneNews;
export interface NewsObjectInterface {
createdAt: string,
description: string,
id: string,
image: string,
preview: string,
title: string,
}
const [oneNewsData, setOneNewsData] = useState<NewsObjectInterface | {}>({});
<Route path="/one-news"
element={<OneNews title={oneNewsData.title} preview={oneNewsData.preview} image={oneNewsData.image} id={oneNewsData.id} createdAt={oneNewsData.createdAt} description={oneNewsData.description}/>}/>
</Routes>
您已将 state 声明为以下类型:
NewsObjectInterface | {}
这意味着您要么拥有一个充满预期属性的 object,要么拥有一个空的 object。当您执行oneNewsData.title
Typescript 时,强制该联合的双方都必须具有该属性。 空的 object 没有任何属性。
似乎在加载实际值时需要一个临时值。 在这种情况下,我建议您将 state 的类型更改为:
useState<NewsObjectInterface | null>(null);
现在默认值为null
。 稍后可能会在 state 中设置一个NewsObjectInterface
。
然后您只需在使用 state 值之前检查null
:
<Route path="/one-news"
element={
oneNewsData && <OneNews // check oneNewsData before use
title={oneNewsData.title}
preview={oneNewsData.preview}
image={oneNewsData.image}
id={oneNewsData.id}
createdAt={oneNewsData.createdAt}
description={oneNewsData.description}
/>
}
/>
像这样更改您的界面(注意?
符号):
export interface NewsObjectInterface {
createdAt?: string,
description?: string,
id?: string,
image?: string,
preview?: string,
title?: string,
}
这应该足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.