如何配置ts-loader使其不将.html文件作为TypeScript处理?
错误原因
这个报错是TypeScript类型检查阶段抛出的,和你配置的webpack loader无关。你调整raw-loader顺序、使用inline loader都属于webpack打包层面的配置,不会影响TS本身的模块解析逻辑。
TS默认只识别.js、.jsx、.ts、.tsx、.d.ts等后缀的模块,遇到.html这种非标准模块后缀时,会自动补全它能识别的后缀去查找文件,就会出现你日志里提到的检索xxx.html.ts、xxx.html.js这类文件的情况,找不到就抛出TS2307错误。
解决方法
需要同时保留你的webpack raw-loader配置(负责打包时把html文件转为字符串导入),再补充TS的模块类型声明即可,操作分为两步:
- 新增HTML模块的类型声明
在你的TS项目根目录或自定义types目录下,新增一个后缀为.d.ts的声明文件(比如global.d.ts),写入如下内容:
declare module '*.html' { const content: string export default content }
如果你的项目使用CommonJS模块规范,可以把导出语句替换为export = content。
如果你坚持使用inline的raw-loader导入写法,需要额外补充如下声明:
declare module '!!raw-loader!*.html' { const content: string export default content }
- 确认tsconfig.json配置
检查tsconfig.json中的include字段,确保你刚写的.d.ts文件被包含在TS解析范围内,示例配置如下:
{ "compilerOptions": { // 其余原有配置保持不变 }, "include": [ "src/**/*", "global.d.ts" // 替换为你实际的声明文件路径 ] }
配置完成后重启TS服务即可解决报错。
内容的提问来源于stack exchange,提问作者patrick
相关产品推荐
相关产品推荐

