我有一个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中正确显示注解/描述?
1条答案
按热度按时间rm5edbpk1#
尝试2和尝试3都是正确的,当您使用类型化对象时,您应该会获得JSDoc描述(参见下面的图像)
你需要记住的一件事是,当你写:
字符串
类型(和相关的JSDoc)在定义之后应用。换句话说,编译器(TS语言服务器)将首先读取函数定义,然后将类型应用于
run2
,类似于a cast操作。编译器会将类型应用于函数定义作为类型推断的一种形式,因为函数需要是定义接口的有效子类型,但不会传播文档。我不知道为什么会这样,但我的猜测是,这可能是因为文档可能不完全适用于子类型本身,或者(更有可能)因为JSDoc是与TypeScript类型不同的东西,所以它没有得到相同的处理。
如果你想在定义中记录文档,你需要记录函数本身:
型
请注意,这不一定是编译器(语言服务器)的工作方式,只是我在实践中发现的匹配行为
从您链接的TSPlayground拍摄的图像:
100d1x
的字符串