Как заставить предложения кода VsCode работать после того, как я связал контекст с чем-то другим? - PullRequest
1 голос
/ 12 октября 2019

У меня есть этот класс:

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

  changeName() {
    this.name = this.getNameFromList();
  }
  getNameFromList() {
    return this.namesList[0];
  }
}

В этом примере VsCode предлагает вещи из контекста 'this' просто отлично внутри метода getNameFromList(). Если я наведу указатель мыши на переменную 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 больше не предлагает ничего для this.namesList внутри getNameFromList, потому что this сейчасотносится к другому контексту, и VsCode не может знать, что я буду связывать this каждый раз, когда вызываю эту функцию. Поскольку я всегда буду вызывать эту функцию с помощью .bind(this), то я бы хотел, чтобы VsCode показывал предложения из этого контекста.

Есть ли способ сообщить VsCode, что this внутри этой одной функции всегда будетпривязан к другому контексту, чтобы я мог заставить автозаполнение и предложения снова работать внутри getNameFromList?

1 Ответ

1 голос
/ 13 октября 2019

Попробуйте использовать аннотацию jsdoc this , чтобы явно указать тип this:

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

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

    /** @this {Cat} */
    function getNameFromList() {
      return this.namesList[0];
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...