TypeScript报错Module has no exported member .ts(2305)的原因及解决方法
问题解决指南
三个具体报错的修复方案
你所有报错的根本原因首先是依赖版本与使用的API不匹配、导入写法错误,对应修复如下:
1. react-router相关两个报错
你当前安装的react-router-dom版本为v5.2.0,配套的类型声明也是v5版本,但你用的Routes、useNavigate都是react-router v6才新增的API,两个修复方案二选一:
方案1:升级到v6版本(推荐)
执行以下命令升级包和对应类型声明:
yarn add react-router-dom@6 @types/react-router-dom@6
升级后你现有的导入写法可以直接正常使用。
方案2:保留v5版本,修改为v5支持的写法
- 把
Routes替换为v5的Switch组件,导入写法改为:
import { BrowserRouter, Switch, Route } from 'react-router-dom';
- 把
useNavigate替换为v5的useHistory钩子,导入写法改为:
import { useHistory } from 'react-router';
2. react-native-vector-icons导入报错
这个库不支持解构导入根路径下的图标集,正确导入写法为:
import MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';
同时你package.json里安装的react-vector-icons是无效冗余包,可以执行yarn remove react-vector-icons删除,避免冲突。
Module has no exported member .ts(2305) 通用排查步骤
以后遇到同类报错可以按以下顺序排查:
- 核对API与依赖版本是否匹配:首先确认你使用的API是否属于当前安装的依赖版本,很多错误都是看了高版本的文档,但是本地装的是低版本依赖导致的,版本不匹配就升级/降级依赖到对应版本即可。
- 核对导入写法是否正确:不是所有包都支持解构从根路径导入,部分包需要导入子路径、或者使用默认导入而非命名导入,可查对应版本的官方文档确认导入规则。
- 核对类型声明包版本是否匹配:如果使用的是第三方JS包,安装的
@types/xxx类型声明包必须和实际安装的xxx依赖大版本完全一致,否则类型声明和实际代码对不上就会报导出不存在的错误。 - 清理缓存重试:如果上述都没问题,大概率是缓存异常导致,先删除
node_modules、yarn.lock(或package-lock.json)文件,重新执行依赖安装,再重启IDE的TypeScript服务(VSCode按Ctrl+Shift+P执行「TypeScript: Restart TS Server」)即可。 - 检查依赖冲突:确认是否安装了同名的冗余依赖,避免导入时解析到错误的包。
内容的提问来源于stack exchange,提问作者GrillOwner69420
相关产品推荐
相关产品推荐

