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

React Router 6.4.3的useRouteError返回unknown类型,如何访问其属性?

React Router 6.4.3 useRouteError 返回unknown类型时的属性访问方案

核心结论

类型转换(类型断言)是可行的解决方式,但类型守卫是更安全、更优的方案,能同时兼顾TypeScript的类型检查和运行时的错误校验。


1. 类型断言方案(快速但需谨慎)

先定义你预期的错误接口:

interface CustomRouteError {
  statusCode?: number;
  message?: string;
  // 根据实际需求添加其他属性
}

然后直接将useRouteError()的返回值断言为该接口:

import { useRouteError } from 'react-router-dom';

const error = useRouteError() as CustomRouteError;

// 此时可直接访问属性
console.log(error.statusCode, error.message);

⚠️ 注意:这种方式没有运行时校验,如果实际返回的错误结构和你定义的接口不符,会导致运行时属性访问错误,适合你能明确控制错误结构的场景。


2. 类型守卫方案(更安全推荐)

通过自定义类型守卫函数,先在运行时校验错误结构,再让TypeScript自动推断类型:

// 定义错误接口
interface CustomRouteError {
  statusCode?: number;
  message?: string;
}

// 类型守卫函数
function isCustomRouteError(error: unknown): error is CustomRouteError {
  return (
    typeof error === 'object' &&
    error !== null &&
    // 按需添加属性校验逻辑
    ('statusCode' in error || 'message' in error)
  );
}

// 使用示例
import { useRouteError } from 'react-router-dom';

const error = useRouteError();

if (isCustomRouteError(error)) {
  // 这里TypeScript会自动推断error为CustomRouteError类型
  console.log('错误状态码:', error.statusCode);
  console.log('错误信息:', error.message);
} else {
  // 处理不符合预期的错误格式
  console.error('未知错误类型:', error);
}

这种方案既满足了TypeScript的类型约束,又能在运行时避免因错误结构不符导致的崩溃,是生产环境更推荐的做法。


补充说明

React Router在内置场景下(比如路由匹配失败、loader/action抛出的错误)返回的错误通常会包含statusCode、message等属性,你可以根据实际业务场景细化类型守卫的校验逻辑,让类型推断更精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:40:25