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

如何为包含嵌套/映射对象的React函数添加TypeScript类型?

为React导航组件添加TypeScript类型的最佳实现

1. 按嵌套结构定义类型接口

根据组件用到的嵌套数据结构,从最内层开始逐层定义接口,确保每个属性都有明确类型:

// 定义导航项的核心属性接口
interface MenuItemPrimary {
  menu_item_label: string;
  // 若使用Prismic官方类型包,可替换为 PrismicLinkField
  menu_item_link: {
    url: string;
    // 可根据Prismic返回的实际字段补充target、type等属性
  };
}

// 定义单个切片的接口
interface NavigationSlice {
  id: string;
  primary: MenuItemPrimary;
}

// 定义导航数据的接口
interface NavigationData {
  slices: NavigationSlice[];
}

// 定义组件Props的接口
interface NavigationProps {
  navigation: {
    data: NavigationData;
  };
}

2. 为组件和map函数添加类型约束

将组件的props指定为NavigationProps,同时给map循环变量明确类型:

import { PrismicLink } from '@prismicio/react';

export function Navigation({ navigation }: NavigationProps) {
  return (
    <nav>
      <ul>
        {navigation.data.slices.map((slice: NavigationSlice) => (
          <li key={slice.id}>
            <PrismicLink field={slice.primary.menu_item_link}>
              {slice.primary.menu_item_label}
            </PrismicLink>
          </li>
        ))}
      </ul>
    </nav>
  );
}

额外说明

  • 若项目已安装@prismicio/types,可直接复用Prismic内置类型(如PrismicLinkField),无需自行定义链接结构,能更精准匹配Prismic返回的数据格式。
  • 逐层定义接口的好处是结构清晰,后续数据结构变更时,只需修改对应层级的接口即可,维护成本更低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:35:28