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

升级Expo至22.0.0后出现React.PropTypes.Number未定义错误求助

解决Expo 22升级后React.PropTypes.Number未定义的问题

首先不用怀疑自己的代码——你没直接用PropTypes,但第三方依赖库大概率还在使用已废弃的React.PropTypes写法,而Expo 22对应的React版本(通常是React 16+)已经把PropTypes从React核心包中移除,单独放到了prop-types独立包中,这就是报错的根源。

下面是具体的排查和解决步骤:

1. 先确认React版本匹配

打开你的package.json,检查react和react-native的版本——Expo 22对应的React版本应该是16.x,这个版本确实不再内置React.PropTypes,所以任何依赖旧写法的包都会报错。

2. 定位出问题的第三方依赖

你需要找到哪个依赖还在使用React.PropTypes:

  • 如果用npm,运行命令:npm ls prop-types,查看依赖树里哪些包没有正确引入独立的prop-types包;
  • 如果用yarn,运行:yarn why prop-types,它会帮你找出依赖链中使用旧写法的包。

3. 具体解决办法

方案一:升级有问题的依赖

找到那个依赖后,去它的npm页面查看最新版本是否已经修复了PropTypes的引用问题,把依赖版本升级到最新稳定版,然后重新安装依赖:

npm install [依赖包名]@latest
# 或者yarn
yarn add [依赖包名]@latest

方案二:临时兼容(不推荐长期使用)

如果暂时找不到可升级的版本,可以在项目入口文件(比如App.js)顶部添加以下代码,手动把独立的prop-types挂载到React上,临时修复报错:

import PropTypes from 'prop-types';
// 给React挂载PropTypes,兼容旧依赖
React.PropTypes = PropTypes;

注意:这只是临时救急方案,长期来看还是要升级依赖避免潜在问题。

方案三:强制升级底层依赖(针对间接依赖问题)

如果是依赖的依赖出了问题(比如A依赖B,B还在使用旧PropTypes),可以用包管理器的强制替换功能:

  • npm:在package.json中添加overrides字段:
    "overrides": {
      "有问题的底层依赖包名": "最新版本号"
    }
    
  • yarn:在package.json中添加resolutions字段:
    "resolutions": {
      "有问题的底层依赖包名": "最新版本号"
    }
    

然后重新安装依赖即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:49:19