2026-10-30 15:57:30
在 TypeScript 中,模块声明用于为非代码资源(如 SVG、GraphQL 文件等)提供类型支持,解决 IDE/TSC 报错“无法找到模块”的问题。 以下是关键点解析:
1. 模块的定义与作用TypeScript 提供两种模块解析策略,通过 compilerOptions.moduleResolution 配置:
NodeNext:匹配 Node.js 的 ESM 行为,读取 package.json 的 "type" 字段决定使用 CommonJS 或 ESM。
Bundler:适用于打包工具(如 Webpack、Vite),支持路径别名和裸模块说明符。
当导入非代码资源(如 SVG、GraphQL)时,TypeScript 无法自动推断类型,需通过声明文件(.d.ts)手动定义模块类型。
示例:声明 SVG 模块创建声明文件:在项目中添加 svg.d.ts(或 global.d.ts):
declare module '*.svg' { const content: string; export default content;}此声明告知 TypeScript:所有以 .svg 结尾的导入应被视为返回 string 类型的模块。
配置 tsconfig.json:确保包含声明文件的目录在 TypeScript 的搜索路径中(通常通过 include 或 files 配置)。
通过 tsconfig.json 的 paths 选项简化模块导入路径:
{ "compilerOptions": { "module": "esnext", "moduleResolution": "bundler", "paths": { "@shared/*": ["./src/shared/*"] } }}错误:[ts] Cannot find module './logo.svg'原因:TypeScript 默认不支持 SVG 导入,需声明模块类型。解决:创建 .d.ts 文件并声明 *.svg 模块。
路径别名失效检查:tsconfig.json 的 paths 配置是否正确,打包工具是否支持别名。
TypeScript 的模块声明通过 .d.ts 文件为非代码资源提供类型支持,结合模块解析策略和路径映射,可高效解决模块导入问题。关键步骤包括: