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

React Router Dom:Outlet Context的正确类型定义及资料查询

为useOutletContext添加正确类型及相关信息说明

一、替换any类型的具体方案

从你提供的代码来看,BooksLayout传递给Outlet的context结构是{ hello: string },可以通过以下方式给useOutletContext指定正确类型:

1. 组件内直接定义类型

在Book.tsx中先声明对应接口,再通过泛型指定useOutletContext的类型:

import { useOutletContext, useParams } from "react-router-dom";

// 定义Outlet上下文的类型
interface BookOutletContext {
  hello: string;
}

export function Book() {
  const { id } = useParams();
  // 通过泛型指定类型,替代any
  const context = useOutletContext<BookOutletContext>();

  return (
    <h1>
      Book {id} {context.hello}
    </h1>
  );
}

2. 抽离公共类型(多组件复用场景)

如果多个组件需要用到这个上下文类型,可将类型抽离到单独文件,保证全局类型一致:

创建types/book.ts文件:

export interface BookOutletContext {
  hello: string;
}

在BooksLayout.tsx中导入并标注类型:

import { Outlet } from "react-router-dom";
import { BookOutletContext } from "./types/book";

export function BooksLayout() {
  return (
    <>
      <Outlet context={{ hello: "world" } as BookOutletContext} />
    </>
  );
}

在Book.tsx中导入并使用:

import { useOutletContext, useParams } from "react-router-dom";
import { BookOutletContext } from "./types/book";

export function Book() {
  const { id } = useParams();
  const context = useOutletContext<BookOutletContext>();

  return (
    <h1>
      Book {id} {context.hello}
    </h1>
  );
}

二、获取更多Context类型相关信息的途径

  • 查看React Router原生类型定义:在项目的node_modules/react-router-dom/dist/index.d.ts中搜索useOutletContext,可直接看到它的泛型实现和类型约束细节,这是最精准的原生类型说明。
  • 查阅TypeScript官方文档中「泛型」「React上下文类型」相关章节,学习TypeScript在React场景下的类型处理逻辑。
  • 参考React Router官方文档的TypeScript集成板块,里面有关于useOutletContext类型使用的示例和最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:01:12