Typescript JSDoc注解未显示在vscode的intellisense中

n3h0vuf2  于 2023-11-20  发布在  TypeScript
关注(0)|答案(1)|浏览(238)

我有一个JavaScript代码库,在那里我添加了类型定义,以便VSCode intellisense可以帮助处理类型和描述,即使是在js文件中。尽管类型正确显示,但我无法让我的JSDoc注解显示在js文件中。
尝试1

interface RunFunction {
  /**
   * @param argv arguments passed from command line
   * @param config global config
   * @returns void
   */
  (
    argv: typeof import('./index.js').argv,
    config: typeof import('./index.js').config,
  ): void;
}

字符串
尝试2

/**
 * @param argv arguments passed from command line
 * @param config global config
 * @returns void
*/
interface RunFunction {
  (
    argv: typeof import('./index.js').argv,
    config: typeof import('./index.js').config,
  ): void;
}


尝试3

interface RunFunction {
  (
    /** arguments passed from command line */
    argv: typeof import('./index.js').argv,
    /** global config */
    config: typeof import('./index.js').config,
  ): void;
}


我也尝试过以上的不同组合。但是当我尝试在js文件中使用它时,尽管我确实看到了正确的建议类型,但我根本看不到注解/描述。
这在TS playground中似乎也不起作用,所以这很可能是TS中JSDoc实现的限制,而不是VScode或项目配置的限制。
是否有其他方法来定义这些类型,以便在intellisense中正确显示注解/描述?

rm5edbpk

rm5edbpk1#

尝试2和尝试3都是正确的,当您使用类型化对象时,您应该会获得JSDoc描述(参见下面的图像)
你需要记住的一件事是,当你写:

const run2: RunFunc2 = function (argv, config) {
  return null;
}

字符串
类型(和相关的JSDoc)在定义之后应用。换句话说,编译器(TS语言服务器)将首先读取函数定义,然后将类型应用于run2,类似于a cast操作。
编译器会将类型应用于函数定义作为类型推断的一种形式,因为函数需要是定义接口的有效子类型,但不会传播文档。我不知道为什么会这样,但我的猜测是,这可能是因为文档可能不完全适用于子类型本身,或者(更有可能)因为JSDoc是与TypeScript类型不同的东西,所以它没有得到相同的处理。
如果你想在定义中记录文档,你需要记录函数本身:

const run2: RunFunc2 = /**
 * @param argv arguments passed from command line
 * @param config global config
 * @returns void
*/function (argv, config) {
  return null;
};

请注意,这不一定是编译器(语言服务器)的工作方式,只是我在实践中发现的匹配行为

从您链接的TSPlayground拍摄的图像:
100d1x

的字符串

相关问题