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

单仓升级React 18遇useTransition类型错误问题排查与优化方案

问题原因

根目录的resolutions(或pnpm的overrides)配置优先级远高于子项目的devDependencies,它会强制整个monorepo所有项目统一使用指定版本的@types/react。你在根目录设置了@types/react: "^17",哪怕newProject的devDependencies里写了18版本,包管理器也会忽略子项目的配置,强制给newProject安装v17的类型定义——而useTransition是React18新增的Hook,v17的类型库里根本没有这个类型,自然会报错。

更优实现方式

1. 针对单个子项目覆盖根级resolutions

如果旧项目还需要保留v17的@types/react,可以在根目录的package.json里给newProject单独配置例外:

"resolutions": {
  "@types/react": "^17",
  "@types/react-dom": "^17",
  // 给newProject单独指定React18的类型
  "newProject/@types/react": "^18",
  "newProject/@types/react-dom": "^18"
}

(注:如果用pnpm,把resolutions换成pnpm.overrides)

2. 取消全局强制,让子项目各自管理依赖

如果大部分项目都要升级到React18,或者旧项目可以自行锁定v17版本,直接删除根目录的@types/react resolutions配置。每个项目在自己的package.json里明确指定所需版本:

  • 旧项目:devDependencies里保留@types/react: "^17"
  • newProject:devDependencies里设置@types/react: "^18"、@types/react-dom: "^18"

这样包管理器会根据每个子项目的配置安装对应版本,自动隔离不同版本的类型定义。

3. 清理依赖缓存并重新安装

修改配置后,一定要清理包管理器的缓存,避免残留旧版本的依赖:

  • Yarn:yarn cache clean && yarn install
  • pnpm:pnpm store prune && pnpm install
  • npm:npm cache clean --force && npm install

额外注意

确保newProject里的react、react-dom版本和@types/react、@types/react-dom版本完全匹配(比如都是18.2.x),类型定义和库版本不一致也会导致各种类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:59:53