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

如何正确为自定义底部标签栏的route.params配置TypeScript类型

问题根源

BottomTabBarProps类型默认接收一个ParamList泛型参数,不传时默认值对应的路由params类型为{},因此TypeScript无法识别你在BottomTabParamList里定义的i18nKey字段。

修复步骤
  1. 为所有用到BottomTabBarProps的位置传入你定义的BottomTabParamList作为泛型参数,首先修改自定义TabBar的属性类型:
    // 给BottomTabBarProps绑定自定义参数列表泛型
    type ScreenProps = BottomTabBarProps<BottomTabParamList> & {
        reduxProp1: number;
        reduxProp2: number;
    };
    
    const TabBar = (screenProps: ScreenProps): JSX.Element => {
        return <View>
            {screenProps.state.routes.map((route, index) => {
                // 此处TS会自动识别route.params下存在i18nKey字段,无类型报错
                const { i18nKey } = route.params;
                // 其余标签栏渲染逻辑
                return null;
            })}
        </View>;
    };
    
  2. 同步修改导航器中tabBar回调的props类型,保证传参类型匹配:
    <MainAppBottomTabs.Navigator
        initialRouteName="ListScreen"
        screenOptions={{
            headerShown: false
        }}
        // 此处props类型同样绑定泛型
        tabBar={(props: BottomTabBarProps<BottomTabParamList>) => (
            <TabBar
                state={props.state}
                navigation={props.navigation}
                descriptors={props.descriptors}
                insets={props.insets}
                // 需传入定义的两个redux属性,否则会报缺参错误
                reduxProp1={/* 实际redux存储值 */}
                reduxProp2={/* 实际redux存储值 */}
            />
        )}>
        {/* 其余Screen配置保持原有写法即可 */}
    </MainAppBottomTabs.Navigator>
    
补充说明

配置完成后,TypeScript会根据遍历过程中route.name的取值自动缩窄params的类型,由于你三个路由的params结构完全一致,直接访问route.params.i18nKey不会触发类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:45:46