Angular 8升级至9(无Material)index.d.ts模块声明问题
我来帮你搞定这个Angular 9升级后的模块声明问题,下面是几个经过验证的解决方案,你可以逐个尝试:
解决方案一:检查
index.d.ts的配置与位置 Angular 9启用的Ivy编译器对类型文件的解析规则更严格,首先确保你的类型声明文件被正确识别:
- 确认
index.d.ts放在src目录下(或者子目录,但要保证被tsconfig.json包含) - 打开
tsconfig.json,检查include数组是否包含了你的类型文件:"include": [ "src/**/*.ts", "src/**/*.d.ts" ] - 对于
googlemaps模块,因为你已经安装了@types/googlemaps,可以尝试简化声明(甚至可以移除自定义声明,让TypeScript自动加载@types包):// 如果仍需自定义声明,可改为更贴合@types的写法 declare module 'googlemaps' { export = google; }
解决方案二:完善
detect-resize的类型声明 空的declare module在Ivy下可能不被认可,你需要补充模块的导出内容:
- 如果你知道
detect-resize的具体API,比如它默认导出一个监听函数,可以这样写:declare module 'detect-resize' { export default function addResizeListener(el: Element, callback: () => void): () => void; // 若有其他导出,继续补充 } - 如果暂时不清楚具体类型,可以用
any过渡(不推荐长期使用,但能快速解决构建问题):declare module 'detect-resize' { const ResizeDetector: any; export default ResizeDetector; }
解决方案三:调整TypeScript的严格模式配置
Angular 9默认开启了更严格的TypeScript检查,你可以尝试暂时调整配置来排查问题:
- 打开
tsconfig.json,修改strict相关选项:
注意:这只是临时排查手段,最终还是建议修复类型声明以符合严格模式要求。// 临时关闭全严格模式(不推荐长期使用) "strict": false, // 或者单独关闭模块解析严格性 "strictModuleResolution": false
解决方案四:查找并安装社区类型包
先检查npm上是否有detect-resize的官方/社区类型包:
- 执行以下命令安装(如果存在的话):
安装完成后,你可以移除自己写的npm install @types/detect-resize --save-devdeclare module 'detect-resize',让TypeScript自动加载这些类型。
内容的提问来源于stack exchange,提问作者kshetline
相关产品推荐
相关产品推荐

