如何修改Expo(React Native)要求的React TypeScript类型版本?
强制要求安装旧版本@types/react的原因
- Expo CLI内置了固定的依赖版本校验规则,会强制对齐当前Expo SDK官方锁定的配套依赖版本树,目前多数稳定版Expo SDK默认锁定的
@types/react版本就是17.0.21。只要启动时检测到项目内TypeScript相关类型依赖版本和官方锁定值不匹配,就会弹出强制安装提示,输入n直接终止启动是CLI写死的硬逻辑,不属于项目配置错误。 - 被强制要求安装的
@types/react@17.0.21本身存在类型定义缺陷:React组件返回值的类型定义和React Navigation、图标库等第三方生态库的类型声明不兼容,会直接触发「组件无法作为JSX组件使用」的类型报错,这也是需要升级类型包的核心原因。
跳过版本校验、使用新版@types/react的解决方法
- 方法1:通过包管理器的版本重写能力锁定版本,从根源避免CLI检测到版本不匹配
在项目根目录package.json中添加对应配置,yarn/pnpm使用resolutions字段,npm使用overrides字段,强制全项目使用指定的新版@types/react,示例配置:
配置完成后删除{ "resolutions": { "@types/react": "^18.2.45" }, "overrides": { "@types/react": "^18.2.45" } }node_modules和锁文件重新安装依赖,重启项目时CLI检测到版本匹配就不会弹出强制安装旧版本的提示。 - 方法2:启动时携带参数跳过依赖校验
启动项目时直接加--no-dependencies参数,跳过CLI所有依赖版本检查、缺失依赖安装提示流程,命令如下:expo start --no-dependencies
执行后会直接启动项目,不会因为版本不匹配终止流程。 - 方法3:修改Expo配置永久关闭版本校验
如果不想每次启动都加参数,可以修改项目根目录的app.json,在expo配置块下添加关闭校验的字段,配置示例:
保存后直接执行{ "expo": { "doctor": { "checkPackageVersions": false, "reactNativeDirectoryCheck": { "enabled": false } } } }expo start就会默认跳过依赖版本校验,不会再弹出强制安装旧版本的提示。
补充提示:升级
@types/react后建议同步把TypeScript版本升级到4.9及以上,同时确认tsconfig.json中compilerOptions.jsx字段值为react-jsx,可以解决绝大多数JSX组件类型识别报错。
内容的提问来源于stack exchange,提问作者Adam Cox
相关产品推荐
相关产品推荐

