Angular2项目使用Scott地图mass point API执行prod构建时类型报错
__super__属性不存在于自定义Scott地图渲染引擎函数类型中 看起来你在Angular 2项目中集成Scott地图的Mass Point API时,遇到了生产构建专属的类型错误——开发环境npm start运行正常,但执行npm run build:prod时抛出了这个类型检查错误:
Property 'super' does not exist on type '(pointSimplifierIns: any, opts: any) => void'
这个问题的核心原因是:生产构建会启用更严格的TypeScript类型检查(通常伴随AOT编译),而你的自定义MyCanvasRender函数可能在原型链上使用了非标准的__super__属性,开发环境的宽松检查忽略了这个问题,但生产构建的严格模式会揪出来。
下面是几个针对性的解决办法,按推荐程度排序:
1. 改用TypeScript类继承语法(最推荐)
既然你的自定义渲染引擎是对标PointSimplifier.Render.Canvas.GroupStyleRender的,直接用TypeScript原生的类继承来实现,完全避开__super__的问题:
// 先导入Scott地图的相关类型(根据实际包名调整) import { PointSimplifier } from 'scott-map-package-name'; class MyCanvasRender extends PointSimplifier.Render.Canvas.GroupStyleRender { constructor(pointSimplifierIns: PointSimplifier, opts: any) { // 调用父类构造函数,替代__super__的作用 super(pointSimplifierIns, opts); // 在这里添加你的自定义初始化逻辑 } // 重写需要自定义的父类方法,比如渲染逻辑 render() { // 先执行父类的render方法 super.render(); // 追加你的自定义渲染代码 } }
这种写法完全符合TypeScript的类型规范,生产构建的类型检查会顺利通过,代码也更易维护。
2. 为__super__添加全局类型声明
如果暂时不想重构代码,可以通过扩展TypeScript的全局函数类型,让它识别__super__属性:
在你的自定义渲染函数所在文件的顶部,添加这段声明:
// 告诉TypeScript,函数类型上可能存在__super__属性 declare interface Function { __super__?: any; }
这样生产构建时的类型检查器就不会再因为__super__的存在而报错了。
3. 临时放宽生产构建的类型检查(不推荐)
如果以上两种方法都暂时无法实施,可以修改tsconfig.prod.json来降低类型检查的严格程度:
- 将
strict字段设置为false,或者单独调整以下选项:{ "compilerOptions": { "noImplicitAny": false, "strictPropertyInitialization": false } }
⚠️ 注意:这种方法只是“治标不治本”,会降低代码的类型安全性,可能隐藏其他潜在的类型问题,仅作为临时应急方案。
修改完成后,重新执行npm run build:prod验证问题是否解决即可。
内容的提问来源于stack exchange,提问作者ken

