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

React中如何用TypeScript Pick从Order接口items数组提取字段作为组件props

问题修复方案

1. 修复OrderItemProps类型定义错误

你当前的类型定义不生效的原因是Order['items']是数组类型,无法直接Pick数组上不存在的name等属性,需要先取数组的元素类型:

// 旧的错误写法
// type OrderItemProps = Pick<Order['items'], 'name' | 'category' | 'amount' | 'price'>
// 新的正确写法
type OrderItemProps = Pick<Order['items'][number], 'name' | 'category' | 'amount' | 'price'>

Order['items'][number]代表取items数组中任意一项的类型,再对其做Pick即可得到正确的props类型。

2. 父组件遍历items传递props的实现

拿到Order类型的数据后,直接用map遍历items数组即可,每一项的属性和OrderItem要求的props完全匹配,直接透传即可:

// 父组件示例代码
import OrderItem from './OrderItem'
import type { Order } from '../OrderListItem/Order'

interface OrderListProps {
  order: Order
}

const OrderList = ({ order }: OrderListProps) => {
  return (
    <div className="order-item-wrapper">
      {/* 遍历items数组传递props */}
      {order.items.map(item => (
        <OrderItem 
          key={item.id}
          name={item.name}
          category={item.category}
          amount={item.amount}
          price={item.price}
        />
      ))}
    </div>
  )
}

export default OrderList

如果要简化写法也可以直接解构透传,刚好提取你需要的四个字段、过滤多余的id字段,效果完全一致:

{order.items.map(({id, ...restProps}) => (
  <OrderItem key={id} {...restProps} />
))}

内容的提问来源于stack exchange,提问作者Tomek C

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:27:01