在TypeScript项目中使用JSX组件时,经常会遇到找不到模块或其相应类型声明的报错,导致组件无法正常导入使用。下面我们先来看一张示意图,了解整体的集成流程。

问题产生的原因
TypeScript在编译阶段会对所有导入的模块进行类型检查,当你导入一个JSX格式的组件时,如果TypeScript找不到对应的类型声明,就会抛出模块导入声明缺失的错误。常见的原因有以下几种:
- tsconfig.json中没有正确开启JSX相关配置,TypeScript无法识别JSX语法
- 导入的JSX组件没有对应的.d.ts声明文件,TypeScript无法获取组件的类型信息
- 模块解析规则配置错误,TypeScript无法定位到JSX组件的位置
基础配置调整
首先需要在tsconfig.json中正确配置JSX相关选项,让TypeScript能够识别JSX语法。可以参考下面的配置:
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"jsx": "react-jsx", // 根据项目使用的框架选择,react项目用react-jsx,preact用preact-jsx等
"moduleResolution": "node",
"esModuleInterop": true,
"strict": true
},
"include": ["src/**/*"]
}这里的jsx字段需要根据你使用的框架选择对应的值,比如使用Vue的JSX可以选择preserve,使用原生JSX可以选择react。
编写自定义声明文件
如果导入的JSX组件没有自带的类型声明,我们可以手动编写声明文件来补充类型信息。比如我们有一个MyButton.jsx组件,对应的声明文件MyButton.d.ts可以这样写:
import { FC } from 'react';
// 定义组件props的类型
interface MyButtonProps {
text: string;
onClick?: () => void;
}
// 声明组件的类型
export const MyButton: FC<MyButtonProps>;如果是第三方库的JSX组件缺少声明,我们还可以在项目根目录下创建global.d.ts文件,添加全局的模块声明:
declare module '*.jsx' {
import { FC } from 'react';
const component: FC<any>;
export default component;
}
declare module '*.tsx' {
import { FC } from 'react';
const component: FC<any>;
export default component;
}验证集成效果
完成配置和声明文件编写后,我们可以尝试导入JSX组件,验证是否还存在报错。示例代码如下:
// 导入自定义JSX组件
import MyButton from './components/MyButton';
// 使用组件
function App() {
return (
<div className="app">
<MyButton text="点击我" onClick={() => console.log('按钮被点击了')} />
</div>
);
}
export default App;如果代码没有类型报错,且组件能够正常渲染,说明集成已经成功。如果还有问题,可以检查tsconfig.json的include字段是否包含了声明文件所在的目录,或者模块导入的路径是否正确。
常见问题排查
如果完成上述操作后还是遇到问题,可以按照下面的步骤排查:
- 检查tsconfig.json的
jsx配置是否和项目使用的框架匹配 - 确认声明文件的后缀是
.d.ts,且被tsconfig.json的include字段覆盖 - 重启IDE的类型检查服务,有时候缓存会导致配置不生效
- 查看报错信息中提到的缺失模块路径,确认路径是否正确
TypeScriptJSX模块导入声明文件组件集成修改时间:2026-06-02 05:06:55