Как правильно экспортировать агрегированные javascript классы - PullRequest
2 голосов
/ 15 января 2020

Я использую 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?

...