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

React Navigation的StackNavigator配置screenOptions出现TS类型报错如何解决?

问题原因

你为screenOptions入参标注的NavigatorProps类型,强制限定了route只能是DashboardIndex单路由的RouteProp类型,但导航器层级的全局screenOptions会被应用到该导航器下所有注册的路由,React Navigation给它预设的入参route类型是所有路由的联合类型RouteProp<ScopeNavParamList, keyof ScopeNavParamList>,二者类型不匹配触发了重载报错。

修复方案

两种修改方式任选即可:

方式1:手动标注兼容所有路由的入参类型

把原来限定单路由的参数类型替换为所有路由的联合类型:

import type { StackScreenProps, StackNavigationProp } from '@react-navigation/stack';

type ScopeNavParamList = {
    DashboardIndex: { title: string };
    HashesIndex: { title: string };
    NewHashes: { title: string };
    AccountIndex: { title: string };
};

// 定义兼容所有路由的screenOptions入参类型
type ScreenOptionsProps = {
  route: StackScreenProps<ScopeNavParamList, keyof ScopeNavParamList>['route'];
  navigation: StackNavigationProp<ScopeNavParamList, keyof ScopeNavParamList>;
};

const ScopeNavigator = createStackNavigator<ScopeNavParamList>();
const screenOptions = ({navigation, route }: ScreenOptionsProps) : StackNavigationOptions => {
    // 原有配置逻辑保持不变
    return {
        headerStyle: {
            backgroundColor: Colors.background,
            elevation: 0,
        },
        headerTitleAlign: "center",
        headerTitleStyle: {
            fontFamily: Typography.poppinsMedium,
            color: Colors.primaryDarker,
            fontSize: 22
    
        },
        cardStyle: {
            backgroundColor: Colors.background
        },
    }    
}

export function DashboardNav() {
    return (
        <ScopeNavigator.Navigator initialRouteName="DashboardIndex" screenOptions={screenOptions} >
            <ScopeNavigator.Screen name="DashboardIndex" component={Dashboard} />
        </ScopeNavigator.Navigator>
    );
}

方式2:使用导航器自带类型自动推导

不需要手动写联合类型,直接复用导航器实例的类型,更简洁不易出错:

const ScopeNavigator = createStackNavigator<ScopeNavParamList>();
// 直接用ScopeNavigator自带的screenOptions类型,参数会自动推导正确类型
const screenOptions: typeof ScopeNavigator['screenOptions'] = ({navigation, route}) => {
    // 原有配置逻辑保持不变
    return {
        headerStyle: {
            backgroundColor: Colors.background,
            elevation: 0,
        },
        headerTitleAlign: "center",
        headerTitleStyle: {
            fontFamily: Typography.poppinsMedium,
            color: Colors.primaryDarker,
            fontSize: 22
    
        },
        cardStyle: {
            backgroundColor: Colors.background
        },
    }    
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:24:04