Angular 8编译TS1086等错误:能否不为30+依赖设skipLibCheck?
不用全局开启
skipLibCheck解决Angular库编译TS错误的方案 针对你遇到的TS1086、TS2304、TS2307这类依赖相关的编译错误,没必要全局开启skipLibCheck,可以用以下精准方案逐个解决:
补充缺失的环境/模块类型
- 对于TS2304(找不到ResizeObserver):在库的
tsconfig.lib.json的compilerOptions.lib数组中添加"DOM",或者单独安装类型包:npm install @types/resize-observer-browser --save-dev - 对于TS2307(找不到arcgis-rest-api模块):直接安装对应类型包:
npm install @types/arcgis-rest-api --save-dev;如果该包没有官方类型,也可以自己编写.d.ts声明文件放在项目的src/types目录下,并在tsconfig中配置typeRoots包含该目录
- 对于TS2304(找不到ResizeObserver):在库的
单独跳过特定依赖的类型检查
如果你确定某些依赖(比如Openlayers或其间接依赖)的类型定义本身有问题,可以在tsconfig.lib.json中把这些依赖的类型文件排除在检查范围外:"exclude": [ "node_modules/openlayers/**/*.d.ts", "node_modules/arcgis-rest-api/**/*.d.ts" ]这样只会跳过指定依赖的类型检查,其他依赖仍会正常进行类型校验
修复依赖的类型错误
针对TS1086(环境上下文不能声明访问器)这类依赖类型文件的语法错误,可以用patch-package工具给依赖打本地补丁:- 修改
node_modules中对应依赖的.d.ts文件,修复访问器的声明问题 - 执行
npx patch-package <依赖包名>生成补丁文件 - 将补丁文件提交到代码仓库,其他开发者安装依赖后会自动应用补丁
- 修改
调整编译配置的严格程度
检查tsconfig.lib.json中的compilerOptions,如果是严格模式下的过严校验导致的问题,可以针对性关闭单个严格选项,比如:"compilerOptions": { "strict": true, "strictPropertyInitialization": false // 仅关闭特定过严的校验项 }不建议全局关闭
strict,尽量保留核心的类型校验规则
内容的提问来源于stack exchange,提问作者Wockeez
相关产品推荐
相关产品推荐

