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

使用HOC导出React Class组件时的TypeScript错误修复咨询

Redux connect 导出组件时的TypeScript错误修复

错误原因

错误根源在getDerivedStateFromProps静态方法:当resourceType与prevState.activeResourceType相等时,函数没有返回任何值,默认返回undefined。但React的TypeScript类型定义要求该方法的返回值必须是Partial<HomePageStateProps> | null,undefined不在允许的类型范围内,导致connect高阶组件的类型校验不通过。

修复建议

方案1:条件不满足时返回null

在getDerivedStateFromProps中,当不需要更新state时,明确返回null:

static getDerivedStateFromProps(nextProps: Props, prevState: HomePageStateProps) {
    const { match : { params : { resourceType } } = { params : { resourceType: resourceTypeEnum.SIM_CARDS }} } = nextProps;
    if (!isEqual(resourceType, prevState.activeResourceType)) {
        return { ...prevState, activeResourceType:  resourceType }
    }
    // 新增:条件不满足时返回null
    return null;
}

方案2:添加明确的返回类型注解

给getDerivedStateFromProps指定返回类型,强制约束返回值符合要求:

static getDerivedStateFromProps(nextProps: Props, prevState: HomePageStateProps): Partial<HomePageStateProps> | null {
    const { match : { params : { resourceType } } = { params : { resourceType: resourceTypeEnum.SIM_CARDS }} } = nextProps;
    if (!isEqual(resourceType, prevState.activeResourceType)) {
        return { ...prevState, activeResourceType:  resourceType }
    }
    return null;
}

额外优化(可选)

HomePageStateProps中activeResourceType定义为可选,但组件state初始化时一定会给它赋值,且后续更新也不会变为undefined,可以将其改为必填:

interface HomePageStateProps {
    activeResourceType: string; // 去掉?,改为必填
}

这能避免后续state使用时的可选性校验问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 15:09:52