我有一个类型接口调用PageInformation
export interface PageInformation extends SanityBody{
_type: "pageInformation";
address: string;
backgroundInformation: string;
email: string;
role: string;
heroImage: Image;
title: string;
phoneNumber: string;
profilePic: Image;
}
在我的英雄部分,我导入了接口,并将其传递到道具
import Link from 'next/link'
import PageInformation from "../typings";
import {urlFor} from "../sanity";
type PageInformation = typeof PageInformation;
type Props = {
pageInformation: PageInformation;
};
在渲染中,我需要一个url helper函数通过访问heroImage属性来获取url,但它抛出了一个类型错误,在yarn dev下运行时这是正常的
<img
className="relative rounded-full h-36 w-36 mx-auto object-cover"
src={urlFor(pageInformation?.heroImage).url()}
/>
下面是我得到的错误消息,这让我不知所措,因为我确实为PageInformation接口定义了heroImage属性。
Type error: Property 'heroImage' does not exist on type 'typeof import("/Users/yudonglu/Desktop/Study/Web/my-portfolio/typings")'.
31 | <img
32 | className="relative rounded-full h-36 w-36 mx-auto object-cover"
> 33 | src={urlFor(pageInformation?.heroImage).url()}
| ^
34 | />
35 |
36 | <div className='z-10'>
这些是我为pageInformation定义的接口
interface SanityBody{
_createdAt: string;
_id: string;
_rev: string;
_updatedAt: string;
}
interface Image{
_type: "image";
asset: {
_ref: string;
_type: "reference";
};
}
1条答案
按热度按时间l2osamch1#
具体来说,只有在标识符(即变量名)或它们的属性上使用typeof才是法律的的。这有助于避免编写你认为正在执行但实际上没有执行的代码:
从这个Typescript: Check "typeof" against custom type
不能在运行时使用typeof来检查接口类型,因为接口类型只存在于编译时。
所以在开发环境中,img src中没有类型检查,这就是为什么你没有问题的原因。2看起来这是一个问题:
只使用导入的
PageInformation
接口