如何在 class 未定义,仅传递给的模块中获取智能感知?

How to get intellisense in a module where the class is not defined, only passed to?

TL;DR:有没有办法为 vscode 中的模块之间传递的 types/variables 启用智能感知?

在这种情况下,我有 3 modules/files:


Test.js

// Test.js
export default class Test {
  constructor() {
    this.whatever = {
      a: "a",
      b: "b"
    };
  }

  someFunc() {
    console.log(this.whatever.b);
  }
}

其他Test.js

// OtherTest.js
export default arg => {
  arg.someFunc();
};

index.js

//index.js
import Test from "./Test";
import OtherTest from "./OtherTest";
const test = new Test();
OtherTest(test);

运行 index.js 中的代码,控制台按预期打印 'b'。

使用vscode,如何让编辑器"aware"知道什么样的变量被传递给OtherTest.js中的函数,这样我就可以拥有测试的所有成员class 智能感知中的弹出窗口?

我想这会在 vscode 中完成,因为类型化参数是不可能的,但除了 TypeScript 之外我不知道,这不是一个选项。

根据VS Code docs

By default the JavaScript language service will analyze and provide IntelliSense for all files in your JavaScript project.

但是,您可以在 jsconfig.json 中指定要包含或排除的文件。

对于您的情况,我已经在 VS Code 中重新创建了您的项目,它在获取类型 OtherTest 类型 [image]:

方面运行良好 "out-of-the-box"

VS Code Intelisence

编辑: 但我认为,问题不在 VS Code 中,你想知道哪种类型的变量通常会起作用。

在这种情况下,您可以查看以下选项:

  1. 使用静态类型语言,例如打字稿
  2. 为 Javascript 使用静态类型检查器,例如流量
  3. 使用 JSDoc