You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js传递组件Props时如何声明类型?Item类型不存在data属性报错求解

问题原因

你给ProductList组件声明的Props类型存在错误:当前写的({ data }: Array<Item>)等于告诉TS整个props对象是Item类型的数组,但实际上你的props是包含data字段的对象,只有data字段的值才是Array<Item>类型,TS在数组类型上找不到data属性自然就会抛出报错。

修复方案

1. 修正ProductList组件的Props类型声明

调整组件的类型声明即可解决报错,同时顺便修正其他潜在问题:

import { Item } from '../../pages/products/index'
// 先定义组件的Props类型
interface ProductListProps {
  data: Array<Item>
}
const ProductList = ({ data }: ProductListProps) => {
  const renderData = () => {
    // 注意不能直接渲染i对象,需要取出对象下的对应字段
    return data.map((i,index) => {
      return <div key={index}>{i.title} - ¥{i.price}</div>
    })
  }
  // 把渲染内容插入到返回的节点中,否则页面展示为空
  return <div>{renderData()}</div>
}
export default ProductList

2. 可选优化:给getServerSideProps增加泛型约束

给getServerSideProps加上返回Props的泛型,既可以获得更完整的类型提示,也能避免后续类型推导出错:

import {
    InferGetServerSidePropsType,
    GetServerSideProps
} from 'next'
import ProductList from '../../component/product/ProductList'
export interface Item {
    title: string
    price: number
}
// 定义服务端返回的Props类型
type ServerProps = {
  data: Array<Item>
}
const products = ({
    data,
}: InferGetServerSidePropsType<typeof getServerSideProps>) => {
    return (
        <div>
            <ProductList data={data} />
        </div>
    )
}
// 给GetServerSideProps传入泛型,context不需要手动写any类型会自动推导
export const getServerSideProps:GetServerSideProps<ServerProps> = async (context) => {
    let res = await fetch('/getAllProduct', {
        method: 'get',
    })
    const response: Array<Item> = await res.json()

    return {
        props: {
            data: response,
        },
    }
}
export default products

内容的提问来源于stack exchange,提问作者angry kiwi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:24:01