Angular 5中继承链用super访问父类公共getter报TS2340错误如何解决?
解决TypeScript TS2340错误:通过
super访问父类public getter的问题 我之前处理过类似的TypeScript继承场景,你碰到的这个TS2340错误,本质是TypeScript解析super.text时的一个语法检查细节——虽然父类的text是public的getter,但直接用点语法通过super访问它,TypeScript会误判为尝试调用非public方法,从而抛出错误。下面给你两种可行的解决办法:
方法一:用方括号语法访问父类getter
直接修改子类的getter实现,把点语法换成方括号访问,绕开TypeScript的语法检查限制:
public get text(): string { return super['text']; }
这种方式不用修改父类代码,能快速保留原有继承结构。
方法二:把父类getter逻辑抽成protected方法
如果觉得方括号写法不够优雅,可以重构父类代码,将getter的核心逻辑封装到一个protected方法里,子类直接调用该方法即可(无需依赖super):
父类修改后:
protected getRawText(): string { return this.el.attr('text/text').replace("\n", ""); } public get text() { return this.getRawText(); }
子类修改后:
public get text(): string { return this.getRawText(); }
这种方式更贴合TypeScript的继承设计规范,代码结构也更清晰,后续维护起来更方便。
你可以根据自身代码场景选择其中一种方案,两种都能解决TS2340的错误。
内容的提问来源于stack exchange,提问作者Denise Mauldin
相关产品推荐
相关产品推荐

