typescript Next.js在yarn dev下运行良好,但在运行下一个导出时抛出类型错误

2ul0zpep  于 2022-11-26  发布在  TypeScript
关注(0)|答案(1)|浏览(116)

我有一个类型接口调用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";
    };
}
l2osamch

l2osamch1#

具体来说,只有在标识符(即变量名)或它们的属性上使用typeof才是法律的的。这有助于避免编写你认为正在执行但实际上没有执行的代码:
从这个Typescript: Check "typeof" against custom type
不能在运行时使用typeof来检查接口类型,因为接口类型只存在于编译时。
所以在开发环境中,img src中没有类型检查,这就是为什么你没有问题的原因。2看起来这是一个问题:

type PageInformation = typeof PageInformation;

只使用导入的PageInformation接口

import PageInformation from "../typings";

相关问题