Javascript 在我将上下文绑定到其他内容之后,如何让VsCode代码建议发挥作用?

Javascript 在我将上下文绑定到其他内容之后,如何让VsCode代码建议发挥作用?,javascript,typescript,visual-studio-code,Javascript,Typescript,Visual Studio Code,我有这门课: class Cat { name = 'Mr. Kitten'; /** * A list of names */ namesList = ['Bob', 'Snow']; changeName() { this.name = this.getNameFromList(); } getNameFromList() { return this.namesList[0]; } } 在本例中,VsCode在getNameFrom

我有这门课:

class Cat {
  name = 'Mr. Kitten';
  /**
   * A list of names
   */
  namesList = ['Bob', 'Snow'];

  changeName() {
    this.name = this.getNameFromList();
  }
  getNameFromList() {
    return this.namesList[0];
  }
}
在本例中,VsCode在
getNameFromList()
方法中从“this”上下文中提出建议。如果我将鼠标移到该方法中的
namesList
变量上,那么它会显示我对该变量的JSDocs注释。显示变量的类型。一切都很好。但是如果我重构这段代码,使
getNameFromList
成为
changeName
中的一个函数,如下所示:

class Cat {
  name = 'Mr. Kitten';
  /**
   * A list of names
   */
  namesList = ['Bob', 'Snow'];

  changeName() {
    this.name = getNameFromList.bind(this)();

    function getNameFromList() {
      return this.namesList[0];
    }
  }
}
现在VsCode不再为
这个.namesList
内部的
getNameFromList
提供任何建议,因为
这个
现在指的是不同的上下文,VsCode不可能知道每次调用该函数时都会绑定
这个
。由于我总是使用
.bind(this)
调用该函数,因此我希望VsCode显示来自该上下文的建议

有没有办法让VsCode知道一个函数中的
this
总是绑定到其他上下文,这样我就可以获得自动完成和建议,以便再次在
getNameFromList
中工作?

尝试使用jsdoc显式声明
this
的类型:

类Cat{
姓名=‘小猫先生’;
/**
*名单
*/
名称列表=['Bob','Snow'];
changeName(){
this.name=getNameFromList.bind(this)();
/**@this{Cat}*/
函数getNameFromList(){
返回此名称列表[0];
}
}
}

OP使用TypeScript时为什么要使用jsdoc?我觉得他们好像在使用JS。为了说明TS的情况,您可以通过编写:
函数getNameFromList(this:Cat){…}
来指定
this
的类型。在JS和TS中,箭头函数完全避免了这个问题。您应该使用
.call(this)
而不是
.bind(this)(
)。