首页 > 解决方案 > 如何正确导出聚合的 javascript 类

问题描述

我正在使用 VSCode 1.41.1(2019 年 11 月发布)。我在一个文件夹中有一些 JavaScript 类,如下所示:

一个.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) {
}

但是,当我将鼠标悬停在参数ab上时,工具提示分别显示(parameter) a: typeof A(parameter) b: typeof B,而不是(parameter) a: A(parameter) b: B我期望的那样。此外,就像工具提示所暗示的那样,当我这样做时自动完成a.显示 A 类属性,而不是 A 的实例(带有成员)。m

我有一个更复杂的项目,它的导入/导出代码没有改变,几个月前这种行为并不存在。似乎是 VSCode 更新?

或者,也许我没有组合 A 和 B 类或正确导出 Lib 类?或者也许我使用的 JSDoc 改变了参数类型的声明方式?

感谢您提供的任何帮助。

编辑:我也尝试过 Lib 导出:

const Lib = {
    A,
    B
};

但这使得 foo 函数参数的 VSCode Intellisense 仅显示any为它们的类型。

另外,我看到这只是在做:

const a = new Lib.A();

智能感知确实正确地将变量a设置为 type A。所以也许我只是做错了 JSDoc@param声明?

标签: javascriptvisual-studio-codejsdoces6-classjavascript-intellisense

解决方案


推荐阅读