繁体   English   中英

参考在 JSDoc 中输入不同的文件而不导入

[英]Refer to type in different file in JSDoc without importing

我正在 Visual Studio Code 中编写 JavaScript (ES6) 代码,并按照VSCode 文档中的说明启用了 VSCode 的类型检查。

当引用在另一个文件中定义的类型(在下面的示例中为Track )时,我收到类似[js] 无法在 JSDoc 引用中找到名称 'Track'的错误,除非我导入它。 当我导入这个类型时,我从 ESLint 得到一个错误: [eslint] 'Track' is defined but never used。 (没有未使用的变量)

我不想禁用 ESLint 规则。 有没有办法为 VSCode 中的类型检查导入类型?

import Track from "./Track";

export default class TrackList {

/**
 * Creates a new track list.
 * @param {Iterable<Track>} tracks the tracks to include
 */
constructor(tracks) {
    this._tracks = tracks ? Array.from(tracks) : [];
}
...

只是为了更新此主题:

使用typescript@2.9,您将能够导入自动导出的JSDoc typedef

通过一个真实的工作示例来看看这个问题 您还可以沿着webpack的代码查看他们如何使用JSDoc和typescript ti静态地填充他们的纯JS源代码库。 这是他们在JSDoc约定中遇到问题的问题

我有类似的问题,这就是我如何解决它。

//file.d.ts
export interface Foo {
    bar: number;
}

export as namespace Baz;

这样做会使Baz命名空间全局化,因此您可以在任何地方使用它而无需导入

/**
 * @param {Baz.Foo} arg 
 */
function test(arg) {

}

现在你在VSCode中得到intellisense和类型检查。
VS代码

禁用es-lint警告的解决方法:在未使用导入的行尾使用//eslint-disable-line no-unused-vars注释。

import Track from './Track'; //eslint-disable-line no-unused-vars

export default class TrackList {

/**
 * Creates a new track list.
 * @param {Iterable<Track>} tracks the tracks to include
 */
constructor(tracks) {
  this._tracks = tracks ? Array.from(tracks) : [];
}
...

您可以使用import("%YOUR_LIB%").%TYPE%

export default class TrackList {

/**
 * Creates a new track list.
 * @param {Iterable<import("./Track").Track>} tracks the tracks to include
 */
constructor(tracks) {
    this._tracks = tracks ? Array.from(tracks) : [];
}
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM