Type '{}' is not assignable to type 'never' TS跨平台报错求解
问题根因
这个跨系统类型报错90%以上是文件路径大小写不匹配导致的,本质是两个系统文件系统的底层特性差异:
- Linux默认大小写敏感,Windows默认大小写不敏感
- 结合git默认开启大小写忽略(
core.ignorecase=true)的特性,很容易出现代码仓库里的文件路径大小写,和你本地开发时写的导入路径大小写不统一的情况 - Linux环境下路径匹配正确,TypeScript可以正常读取组件的Props类型定义;Windows环境下路径匹配异常,导致两个组件的Props类型被错误推导为
never,你给组件传空{}属性的时候就会触发Type '{}' is not assignable to type 'never'的报错。
排查步骤
- 核对
UserForm、LoginForm两个组件的导入路径大小写,和实际文件系统的文件名、所在目录名是否完全一致:比如导入写的是import UserForm from './UserForm.tsx',要确认实际文件名就是UserForm.tsx,不存在userForm.tsx、userform.tsx这类大小写差异 - 运行
git config core.ignorecase检查git配置,如果返回true,说明git不会同步文件名大小写修改,你本地Linux改了文件名大小写的话不会提交到仓库,Windows拉取的代码还是旧的大小写文件名 - 检查项目
tsconfig.json的forceConsistentCasingInFileNames配置项,确认两个系统的生效配置一致,没有本地未提交的覆盖配置
解决方案
- 统一所有导入路径和实际文件名的大小写,保持完全一致
- 执行
git config core.ignorecase false关闭git大小写忽略,后续文件名大小写修改可以正常同步到仓库 - 在
tsconfig.json中添加"forceConsistentCasingInFileNames": true配置,从TypeScript层面强制校验路径大小写,避免后续同类问题 - 如果以上操作都无效,删除两个系统的
node_modules目录,重新执行依赖安装,排除依赖安装过程产生的文件差异问题
你之前尝试断言JSX.Element无效是因为错误根源是组件Props的类型推导异常,和组件返回值类型无关,所以断言不会生效。
内容的提问来源于stack exchange,提问作者DFDark
相关产品推荐
相关产品推荐

