解决MyMaps无法作为JSX组件使用的返回类型报错
报错原因
MyMaps无法作为JSX组件使用、返回值类型为void的报错和React版本无关,本质是TypeScript对.jsx后缀组件的类型推断失效:你在TSX页面里导入后缀为.jsx的React组件时,TS无法正确识别组件的返回值类型,默认将其判定为void类型,不符合JSX元素的类型规范。
另外你的MyMaps组件中存在直接返回字符串的分支,也会干扰TS的类型推导:
if (loadError) return 'Error'; if (!isLoaded) return 'Loading...';
修复步骤
- 优先选择最稳妥的方案:将
components/maps/路径下的maps.jsx文件重命名为maps.tsx,让TypeScript直接识别TSX格式的React组件,自动完成正确的类型推导。 - 重命名后修改组件里的直接返回字符串逻辑,保证所有分支返回合法JSX元素,避免后续类型报错:
if (loadError) return <>加载地图出错</>; if (!isLoaded) return <>地图加载中...</>;
- 如果需要保留
.jsx后缀不修改文件名,可以在项目根目录的全局类型声明文件(通常是next-env.d.ts或自定义的global.d.ts)中添加以下声明,让TS识别所有jsx导出的React组件:
declare module '*.jsx' { import type { ComponentType } from 'react'; const JSXComponent: ComponentType<any>; export default JSXComponent; }
- 临时快速绕过校验的方案(不推荐长期使用):在
index.tsx导入MyMaps的上一行添加// @ts-ignore注释,跳过该行的类型检查。
内容的提问来源于stack exchange,提问作者Ronny Coste
相关产品推荐
相关产品推荐

