继承方法调用触发Typescript编译器错误

Yoo*_*ooz 8 javascript node.js webstorm typescript

我遇到了webstorm打字稿编译器的问题.我有以下课程

export class rootData{
  id:string
  //...

  constructor(){
    //...
  }

  insert = ():Promise<any> =>{
    //...
  }
}

class child extends rootData {
  //...   

  constructor(){
     super();
  }

  insert = ():Promise<any> => {
        return super.insert();
    }
}
Run Code Online (Sandbox Code Playgroud)

所以输入"super",我在intellisense中看到所有rootData公共方法.但是在设置super.insert()之后,我收到以下错误:

TS2340:只能通过'super'关键字访问基类的公共和受保护方法

在TS游乐场尝试,它正在工作(简化版思想).

谢谢你的帮助.

编辑:检查编译的JavaScript后,超级方法的调用就在那里.所以编译器给出了一个错误,但编译...

bas*_*rat 19

因为super调用被重定向到prototype你不能使用property和需要使用method即不能使用= ()=>.

固定代码:

export class rootData{
  id:string
  //...

  constructor(){
    //...
  }

  insert():Promise<any>{
    //...
  }
}

class child extends rootData {
  //...   

  constructor(){
     super();
  }

  insert():Promise<any> {
        return super.insert();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我也有这个问题。感谢您发布此信息。TypeScript 的设计令人遗憾,因为我在对象成员定义中使用了“=&gt;”,以确保捕获“this”,而不必在每次需要对对象进行操作的成员函数时调用 bind()。所以现在我有这个丑陋之处,所有函数都使用 =&gt; 并捕获它,除了碰巧在覆盖中使用的函数,需要 bind()。这会产生非常丑陋和令人困惑的代码。似乎有更好的方法来进行超级调用,而不是简单地禁止“=&gt;”。 (3认同)