Я использую VSCode 1.41.1 (выпуск ноября 2019 года). У меня есть несколько JavaScript классов в папке, например:
a. js
class A {
constructor() {
this.m = 2;
}
}
export default A;
b. js
class B {
constructor() {
this.n = 4;
}
}
export default B;
Я пытаюсь собрать их в одну библиотеку, чтобы я мог сделать что-то вроде Lib.A для ссылки на класс A.
Мой текущий метод такой:
lib. js
import A from './a';
import B from './b';
class Lib {};
Lib.A = A;
Lib.B = B;
export default Lib;
Затем я хотел бы использовать класс Lib во внешнем приложении. У меня есть этот файл:
приложение. js
import Lib from './lib';
/**
* @param {Lib.A} a
* @param {Lib.B} b
*/
function foo(a, b) {
}
Тем не менее, когда я наведите курсор мыши на параметры a
или b
, подсказки скажем (parameter) a: typeof A
и (parameter) b: typeof B
соответственно, а не (parameter) a: A
и (parameter) b: B
, как я ожидал. Кроме того, при автозаполнении, когда я делаю a.
, отображаются свойства класса A, а не экземпляр A (с элементом m
), как подсказывают подсказки.
У меня есть более сложный проект, код импорта / экспорта которого не изменился, и такого поведения в нем не было несколько месяцев go. Возможно, это похоже на обновление VSCode?
Или, может быть, я не комбинирую классы A и B или неправильно экспортирую класс Lib? Или, может быть, используемый мной JSDo c изменил способ объявления ввода параметров?
Спасибо за любую помощь, которую вы можете оказать.
Редактировать: Я также пытался за Экспорт в Lib:
const Lib = {
A,
B
};
Но это заставляет VSCode Intellisense для параметров функции foo просто показывать any
в качестве их типа.
Кроме того, я вижу, что просто делает:
const a = new Lib.A();
Intellisense правильно делает переменную a
как тип A
. Так что, возможно, я просто неправильно делаю декларацию JSDo c @param
?