参考在 JSDoc 中输入不同的文件而不导入
Refer to type in different file in JSDoc without importing
我正在 Visual Studio 代码中编写 JavaScript (ES6) 代码并启用 VSCode 的类型检查,如 VSCode docs 中所述。
当引用在另一个文件中定义的类型时(下例中的 Track
),我收到类似 [js] 找不到名称 'Track'[ 的错误=22=] 在 JSDoc 引用该类型,除非我导入它。当我导入这种类型时,我从 ESLint 得到一个错误:[eslint] 'Track' is defined but never used。 (没有未使用的变量)
我不想禁用 ESLint 规则。有没有办法导入类型 only 用于 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) : [];
}
...
我有一个类似的问题,这是我如何解决的。
//file.d.ts
export interface Foo {
bar: number;
}
export as namespace Baz;
这样做将使 Baz
命名空间成为全局命名空间,这样您就可以在任何地方使用它而无需导入
/**
* @param {Baz.Foo} arg
*/
function test(arg) {
}
现在您可以在 VSCode.
中获得智能感知和类型检查
只是为了保持这个主题的更新:
使用 typescript@2.9,您将能够导入 JSDoc typedef
,它们会自动导出。
查看 this issue 中的实际示例。
您还可以浏览 webpack 的代码,看看他们如何使用 JSDoc 和 typescript 静态检查他们的纯 JS 源代码库。这里是 their issue 和 JSDoc 约定,您可以从中获得灵感。
禁用 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) : [];
}
...
我正在 Visual Studio 代码中编写 JavaScript (ES6) 代码并启用 VSCode 的类型检查,如 VSCode docs 中所述。
当引用在另一个文件中定义的类型时(下例中的 Track
),我收到类似 [js] 找不到名称 'Track'[ 的错误=22=] 在 JSDoc 引用该类型,除非我导入它。当我导入这种类型时,我从 ESLint 得到一个错误:[eslint] 'Track' is defined but never used。 (没有未使用的变量)
我不想禁用 ESLint 规则。有没有办法导入类型 only 用于 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) : [];
}
...
我有一个类似的问题,这是我如何解决的。
//file.d.ts
export interface Foo {
bar: number;
}
export as namespace Baz;
这样做将使 Baz
命名空间成为全局命名空间,这样您就可以在任何地方使用它而无需导入
/**
* @param {Baz.Foo} arg
*/
function test(arg) {
}
现在您可以在 VSCode.
中获得智能感知和类型检查
只是为了保持这个主题的更新:
使用 typescript@2.9,您将能够导入 JSDoc typedef
,它们会自动导出。
查看 this issue 中的实际示例。 您还可以浏览 webpack 的代码,看看他们如何使用 JSDoc 和 typescript 静态检查他们的纯 JS 源代码库。这里是 their issue 和 JSDoc 约定,您可以从中获得灵感。
禁用 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) : [];
}
...